Removed debian_gregale dir
[maemo-efl] / trunk / build-all.sh
1 #!/bin/bash
2
3 source "helper-functions.sh"
4
5 ###########################################################
6 # Variable definitions
7 ###########################################################
8 __this_script=`basename $0`
9 __this_script_dir=`dirname $0`
10 __orig_path=$PATH
11
12 # Binaries
13 __date=`which date`
14 __git=`which git`
15 __head=`which head`
16 __mkdir=`which mkdir`
17 __sed=`which sed`
18 __uname=`which uname`
19 __chmod=`which chmod`
20 __grep=`which grep`
21 __egrep=`which egrep`
22 __debsign=`which debsign`
23
24 # git definitions
25 __git_clone="$__git clone -q"
26 __git_pull="$__git pull -q -n"
27 __git_clean="$__git clean -q -x -d"
28 __git_reset="$__git reset --hard HEAD"
29 __git_repo="git://staff.get-e.org/"
30
31 # e17 git repositories paths
32 __e17_libs="e17/libs"
33 __e17_proto="e17/proto"
34 __e17_python_efl="$__e17_proto/python-efl"
35 __e17_python_etk="users/cmarcelo"
36
37 # modules to build
38 #__lib_modules="edb eet evas ecore embryo edje efreet epeg epsilon emotion etk ewl e_dbus exml enhance"
39 __lib_modules="eet:evas:ecore:embryo:edje:imlib2:epeg:epsilon:etk:e_dbus"
40 __python_modules="python-evas:python-ecore:python-edje:python-epsilon:python-e_dbus"
41 __python_etk_module="python-etk"
42
43 # dpkg definitions
44 __common_build_pkg_options="-rfakeroot -us -uc -D"
45
46 # Packages dirs and log file
47 __today=`$__date +%Y%m%d`
48 __base_pkg_dir="$__this_script_dir/efl_packages_$__today"
49 __output_file="$PWD/$__base_pkg_dir/efl_packages_$__today.log"
50
51 # Scratchbox definitions
52 __sbox_path="/scratchbox"
53
54 # Other
55 __update_repositories=1
56 __installed_packages=""
57
58 ###########################################################
59 # Function definitions
60 ###########################################################
61
62 function usage() {
63     cat << EOF
64
65 Usage: $__this_script [OPTIONS]
66
67 Build script for EFL debian packages for Maemo.
68
69 Options:
70     -c      Don't update source repositories.
71     -h      Show this usage guide.
72     -s PATH Specify alternate scratchbox path (default: $__sbox_path).
73
74 EOF
75 }
76
77 function create_log_file() {
78     if [ ! -r $__output_file ]; then
79         msg_begin "Creating log file"
80         touch $__output_file
81         msg_end $?
82     else
83         msg "Using existing log file: $__output_file"
84     fi
85 }
86
87 function log_to_file() {
88     local now
89     local msg
90     msg=$1
91
92     if [ ! -r $__output_file ]; then
93         error "log_to_file(): Log file does not exist"
94     fi
95
96     now=`$__date +%H:%M:%S`
97     echo "$now: $msg" >> $__output_file
98 }
99
100 function start_log() {
101     local now
102     now=`$__date -R`
103
104     echo "" >> $__output_file
105
106     if [ $? != 0 ] ; then
107         error "start_log(): Could not create $__output_file file"
108     fi
109
110     cat << EOF >> $__output_file
111 *********************************************************
112 * Started $__this_script: $now *
113 *********************************************************
114
115 EOF
116 }
117
118 function finish_log() {
119     local now
120     now=`$__date -R`
121
122     if [ ! -r $__output_file ]; then
123         error "finish_log(): Log file does not exist"
124     fi
125
126     cat << EOF >> $__output_file
127
128 * Finished $__this_script: $now
129 EOF
130 }
131
132 function clone_repository() {
133     local repo
134     repo=$1
135     $__git_clone $repo.git >> $__output_file 2>&1
136     return $?
137 }
138
139 function update_repository() {
140     local repo
141     repo=$1
142
143     if [ ! -d $repo ]; then
144         error "  Trying to update invalid repository"
145     fi
146
147     cd $repo
148     $__git_pull >> $__output_file 2>&1 || return 1
149     cd - > /dev/null 2>&1
150
151     return 0
152 }
153
154 function clean_repository() {
155     local repo
156     repo=$1
157
158     if [ ! -d $repo ]; then
159         error "  Trying to clean invalid repository"
160     fi
161
162     cd $repo
163     $__git_reset >> $__output_file 2>&1 || return 1
164     $__git_clean >> $__output_file 2>&1 || return 1
165     cd - > /dev/null 2>&1
166
167     return 0
168 }
169
170 function build_pkg() {
171     local dir
172     dir=$1
173
174     cat << EOF > $dir/sbox_build_pkgs
175 #!/bin/bash
176
177 export DEBFULLNAME="$DEBFULLNAME"
178 export DEBEMAIL="$DEBEMAIL"
179
180 cd $dir/`basename $dir`
181
182 if [ -x ./autogen.sh ]; then
183     NOCONFIGURE=1 ./autogen.sh >> $dir/sbox_build_pkgs.log 2>&1 || exit 1
184 fi
185
186 VERSION=\`$__sbox_dpkg_parsechangelog | grep Version: | cut -d" " -f2 | cut -d- -f1\`
187 REVISION=\`$__sbox_dpkg_parsechangelog | grep Version: | cut -d- -f2\`
188
189 $__sbox_dch -v \$VERSION+cvs$__today-\$REVISION -D $__distro "Snapshot CVS release of $__today" >> $dir/sbox_build_pkgs.log 2>&1 || exit 1
190 $__sbox_dpkg_buildpackage $__build_pkg_options >> $dir/sbox_build_pkgs.log 2>&1
191 exit \$?
192 EOF
193
194     $__chmod 755 $dir/sbox_build_pkgs
195     $__sbox $dir/sbox_build_pkgs
196     return $?
197 }
198
199 function install_pkgs() {
200     local dir
201     dir=$1
202
203     cat << EOF > $dir/sbox_install_pkgs
204 #!/bin/bash
205
206 cd $dir
207 $__sbox_dpkg --install *.deb >> $dir/sbox_install_pkgs.log 2>&1
208 exit \$?
209 EOF
210
211     $__chmod 755 $dir/sbox_install_pkgs
212     $__sbox $dir/sbox_install_pkgs || return 1
213
214     for package in $dir/*.deb; do
215         pkg=`basename $package | cut -d_ -f1`
216         echo $__installed_packages | tr " " "\n" | sort -u | $__egrep "\^$pkg\$" > /dev/null 2>&1
217
218         if [ ! $? -eq 0 ]; then
219             __installed_packages="$__installed_packages $pkg"
220         fi
221     done
222
223     return 0
224 }
225
226 function uninstall_pkgs() {
227
228     cat << EOF > /tmp/sbox_uninstall_pkgs
229 #!/bin/bash
230
231 cd /tmp
232 $__sbox_dpkg --purge $__installed_packages >> /tmp/sbox_uninstall_pkgs.log 2>&1
233 exit \$?
234 EOF
235
236     __installed_packages=""
237     $__chmod 755 /tmp/sbox_uninstall_pkgs
238     $__sbox /tmp/sbox_uninstall_pkgs
239     return $?
240 }
241
242 function sign_pkgs() {
243     local dir
244     dir=$1
245
246     cd $dir
247     $__debsign *.changes >> $dir/sign_pkgs.log 2>&1 || return 1
248
249     cd - > /dev/null 2>&1
250
251     return 0
252 }
253
254 function get_sources() {
255     local modules
256     local repo
257     modules=`echo $1|$__sed -e 's/:/ /g'`
258     repo=$2
259
260     for module in $modules; do
261
262         if [ ! -d $module ]; then
263             error "Directory $module does not exist."
264         fi
265
266         cd $module
267
268         if [ -d $module/.git ]; then
269             if [ ! $__update_repositories -eq 0 ]; then
270                 log_to_file "Updating existing repository at $PWD/$module"
271
272                 msg_begin "  Updating $module repository"
273                 update_repository $module
274                 msg_end $?
275             else
276                 log_to_file "Skipping update of $module repository"
277             fi
278         elif [ -d $module ]; then
279             log_to_file "Removing invalid repository at $PWD/$module"
280             rm -rf $module
281         fi
282
283         if [ ! -d $module ]; then
284             msg_begin "  Cloning $repo/$module.git"
285             clone_repository $repo/$module
286             msg_end $?
287         fi
288
289         cd ..
290     done
291 }
292
293 function setup_distro() {
294     local target
295     local sources_list_file
296     local target_conf_file
297     local ret
298     target=$1
299     sources_list_file=$__sbox_path/users/$USER/targets/$target/etc/apt/sources.list
300     target_conf_file=$__sbox_path/users/$USER/targets/$target.config
301     ret=1
302
303     log_to_file "setup_distro(): Target $target"
304     log_to_file "setup_distro(): sources.list file : $sources_list_file"
305     log_to_file "setup_distro(): config file: $target_conf_file"
306
307     if [ "x$target" != "x" ] && [ -r $sources_list_file ] && [ -r $target_conf_file ]; then
308         # XXX: FIXME Figure out a better way to get the distro string
309         __distro=`$__head -1 $sources_list_file | cut -d" " -f3`
310         __arch=`$__grep SBOX_CPU= $target_conf_file | cut -d= -f2`
311         __pkg_dir="$__base_pkg_dir/$__distro/$__arch"
312         if [ "x$__arch" = "xarm" ] ; then
313             __build_pkg_options="$__common_build_pkg_options -B"
314         else
315             __build_pkg_options="$__common_build_pkg_options -I.svn -I.git -I.gitignore -I.cvsignore -sa"
316         fi
317         ret=0
318     fi
319
320     if [ $ret -eq 0 ]; then
321         log_to_file "setup_distro(): Configuration:"
322         log_to_file "setup_distro(): distro...........: $__distro"
323         log_to_file "setup_distro(): arch.............: $__arch"
324         log_to_file "setup_distro(): build options....: $__build_pkg_options"
325         log_to_file "setup_distro(): pkg_dir..........: $__pkg_dir"
326     fi
327
328     return $ret
329 }
330
331 function setup_sbox() {
332     if [ ! -d $__sbox_path ]; then
333         error "Invalid scratchbox path: $__sbox_path"
334     fi
335
336     __sbox="$__sbox_path/login"
337     __sbox_tools_bin_path="$__sbox_path/tools/bin"
338     __sbox_sb_conf="$__sbox_tools_bin_path/sb-conf"
339
340     __sbox_maemo3_debian_bin_path="/scratchbox/devkits/maemo3-debian/bin"
341     __sbox_dpkg="$__sbox_maemo3_debian_bin_path/dpkg"
342     __sbox_dpkg_buildpackage="$__sbox_dpkg-buildpackage"
343     __sbox_dpkg_parsechangelog="$__sbox_dpkg-parsechangelog"
344
345     __sbox_debian_sarge_bin_path="/scratchbox/devkits/debian-sarge/bin"
346     __sbox_dch="$__sbox_debian_sarge_bin_path/dch"
347 }
348
349 function change_sbox_target() {
350     local target
351     target=$1
352
353     $__sbox_sb_conf select $target >> $__output_file 2>&1
354     return $?
355 }
356
357 ###########################################################
358 # Begin script
359 ###########################################################
360
361 # Parse comand line options
362 while getopts "chs:" opt ; do
363     case "$opt" in
364         c)
365             __update_repositories=0
366             ;;
367         h)
368             usage
369             exit 0
370             ;;
371         s)
372             __sbox_path=$OPTARG
373             if [ "x$__sbox_path" = "x" ] || [ ! -d $__sbox_path ]; then
374                 error "Invalid scratchbox path: $__sbox_path"
375             fi
376             ;;
377         [?])
378             usage
379             exit 1
380             ;;
381     esac
382 done
383
384 # Initial checks
385
386 # Check if we're running inside scratchbox
387 if [ -r /targets/links/scratchbox.config ]; then
388     error "You should run this script ouside the scratchbox environment."
389 fi
390
391 # Create base packages dir
392 if [ ! -d $__base_pkg_dir ]; then
393     msg_begin "Creating base packages dir $__base_pkg_dir"
394     $__mkdir -p $__base_pkg_dir
395     msg_end $?
396 fi
397
398 # Create log file
399 create_log_file
400 start_log
401
402 # Download modules under e17/libs
403 msg "Downloading e17 modules"
404 get_sources $__lib_modules $__git_repo$__e17_libs
405
406 # Download python modules under proto/python/efl
407 msg "Downloading python modules"
408 get_sources $__python_modules $__git_repo$__e17_python_efl
409
410 # Download python-etk module
411 get_sources $__python_etk_module $__git_repo$__e17_python_etk
412
413 # Setup scratchbox variables
414 setup_sbox
415
416 # For each scratchbox target
417 for target in `$__sbox_sb_conf list --targets`; do
418     msg_begin "Checking distro and arch for target $target"
419     setup_distro $target
420     msg_end $?
421
422     msg "  Distribution..: $__distro"
423     msg "  Architecture..: $__arch"
424     msg "  Build Options.: $__build_pkg_options"
425
426     if [ ! -d $__pkg_dir ]; then
427         msg_begin "  Creating dir for $__distro $__arch packages"
428         $__mkdir -p $__pkg_dir
429         msg_end $?
430     fi
431
432     msg_begin "  Changing current sbox target to $target"
433     change_sbox_target $target
434     msg_end $?
435
436     # For each module
437     for module in `echo $__lib_modules $__python_modules $__python_etk_module|$__sed -e 's/:/ /g'`; do
438
439         msg "  Building $module packages for $__distro $__arch"
440
441         if [ -d ./$module/$module/debian ]; then
442             msg_begin "  Removing existing debian directory"
443             rm -rf ./$module/$module/debian
444             msg_end $?
445         fi
446
447         msg_begin "  Copying specific debian directory"
448         if [ -d ./$module/debian_$__distro ]; then
449             cp -r ./$module/debian_$__distro ./$module/$module/debian
450         elif [ -d ./$module/debian ]; then
451             cp -r ./$module/debian ./$module/$module/
452         else
453             error "  Missing debian directory for $module"
454         fi
455         msg_end $?
456
457         if [ -d /tmp/$module/$module ]; then
458             msg_begin "  Removing temporary $module"
459             rm -rf /tmp/$module/$module
460             msg_end $?
461         fi
462
463         msg_begin "  Copying $module dir to /tmp"
464         cp -u -r $module /tmp
465         msg_end $?
466
467         msg_begin "  Cleaning $module repository"
468         clean_repository $module/$module
469         msg_end $?
470
471         msg_begin "  Building $module packages"
472         build_pkg /tmp/$module
473         msg_end $?
474
475         msg_begin "  Signing $module packages"
476         sign_pkgs /tmp/$module
477         msg_end $?
478
479         msg_begin "  Installing $module packages"
480         install_pkgs /tmp/$module
481         msg_end $?
482
483         msg_begin "  Copying $module packages"
484         if [ "x$__arch" != "xarm" ]; then
485             mv /tmp/$module/*.dsc /tmp/$module/*.tar.gz $__pkg_dir
486         fi
487         mv /tmp/$module/*.deb /tmp/$module/*.changes $__pkg_dir
488         msg_end $?
489
490         msg_begin "  Removing temporary $module"
491         rm -rf /tmp/$module/$module
492         msg_end $?
493     done
494
495     msg_begin "  Uninstalling packages $__installed_packages"
496     uninstall_pkgs
497     msg_end $?
498 done
499
500 # END
501 finish_log