Better detection of package version
[maemo-efl] / trunk / scripts / gen-deb-src.sh
1 #!/bin/bash
2
3 E_BASE_REPO="http://svn.enlightenment.org/svn/e"
4 E_TRUNK_REPO="$E_BASE_REPO/trunk"
5 E_PYTHON_SUFIX="BINDINGS/python"
6 E_PYTHON_REPO="$E_TRUNK_REPO/$E_PYTHON_SUFIX"
7 E_PROTO_REPO="$E_TRUNK_REPO/PROTO"
8
9 [ -z $OUTPUT_FILE ] && OUTPUT_FILE="/dev/null"
10 [ -z $E_SVN_REV ] && E_SVN_REV="50928"
11
12 TMP_DIR="maemo-efl-deb-src-$E_SVN_REV"
13 VERSIONS_DIR="$TMP_DIR/versions"
14
15 # C Modules
16 ALL_MODULES=("eina"
17              "eet"
18              "evas"
19              "ecore"
20              "embryo"
21              "edje"
22              "e_dbus"
23              "emotion"
24              "epdf"
25              "ethumb"
26              "libeweather"
27              "elementary"
28              "efl-core")
29
30 # Python Bindings
31 ALL_MODULES+=("python-evas"
32               "python-ecore"
33               "python-edje"
34               "python-e_dbus"
35               "python-ethumb"
36               "python-efl_utils"
37               "python-elementary"
38               "python-efl-core")
39
40 MAEMO_REV="maemo1"
41 MAEMO_REPO="extras-devel"
42
43 function exit_error(){
44     echo " ERROR" && exit 1
45 }
46
47 function init(){
48     if [ -d $TMP_DIR ]; then
49                 echo -n "Cleaning up ..."
50                 rm -rf $TMP_DIR || exit_error
51         echo " OK"
52     fi
53
54         echo -n "Creating build dir ..."
55     mkdir -p $TMP_DIR || exit_error
56     echo " OK"
57 }
58
59 function checkout_repositories(){
60     echo "Checking out repositories ..."
61     for module in ${ALL_MODULES[@]};do
62         echo -n "       $module"
63
64         case $module in
65             elementary)
66                 REPO="$E_TRUNK_REPO/TMP/st"
67                 ;;
68             epdf|libeweather)
69                 REPO="$E_PROTO_REPO"
70                 ;;
71             *efl-core)
72                 cp -r $module $TMP_DIR >> $OUTPUT_FILE 2>&1 && echo " ... OK" || exit_error
73                 continue
74                 ;;
75             python-*)
76                 REPO="$E_PYTHON_REPO"
77                 ;;
78             *)
79                 REPO=$E_TRUNK_REPO
80                 ;;
81         esac
82
83                 REV="-r$E_SVN_REV "
84
85         echo -n " ."
86         svn co $REV $REPO/$module $TMP_DIR/$module >> $OUTPUT_FILE 2>&1 || exit_error
87         echo -n "."
88         rm -rf $TMP_DIR/$module/debian
89         echo -n "."
90         cp -r $module/debian $TMP_DIR/$module/debian >> $OUTPUT_FILE 2>&1 || exit_error
91         echo " OK"
92     done
93
94         echo -n "Cleaning up repositories ..."
95         rm -rf `find $TMP_DIR -name .svn -type d`
96         rm -rf `find $TMP_DIR -name .git -type d`
97     echo " OK"
98 }
99
100 function c_module_version() {
101     local mod=$1
102
103     [ -z $mod ] && exit_error
104
105     VERSION=`grep AC_INIT $TMP_DIR/$mod/configure.ac | cut -d[ -f3 | cut -d] -f1 || exit_error`
106     if [ $VERSION = "v_ver" ]; then
107         MAJOR=`grep v_maj $TMP_DIR/$mod/configure.ac | xargs | cut -d[ -f3 | cut -d] -f1 || exit_error`
108         MINOR=`grep v_min $TMP_DIR/$mod/configure.ac | xargs | cut -d[ -f3 | cut -d] -f1 || exit_error`
109         MICRO=`grep v_mic $TMP_DIR/$mod/configure.ac | xargs | cut -d[ -f3 | cut -d] -f1 || exit_error`
110         if [ -z $MAJOR ] || [ -z $MINOR ] || [ -z $MICRO ]; then
111             exit_error
112         fi
113
114         VERSION=$MAJOR.$MINOR.$MICRO
115     fi
116 }
117
118 function update_changelogs(){
119         echo "Updating changelogs ..."
120     for module in ${ALL_MODULES[@]};do
121         echo -n "       $module ."
122
123         case $module in
124             *efl-core)
125                 c_module_version "evas"
126                 ;;
127             python-*)
128                 VERSION=`grep version $TMP_DIR/$module/setup.py | cut -d\' -f2 || exit_error`
129                 ;;
130             *)
131                 c_module_version "$module"
132                 ;;
133         esac
134
135         echo -n "."
136         if [ -z $VERSION ] || [ $VERSION = "v_ver" ]; then
137             exit_error
138         fi
139
140         echo -n "."
141         dch --force-distribution -b -c $TMP_DIR/$module/debian/changelog -v $VERSION.$E_SVN_REV-$MAEMO_REV -D $MAEMO_REPO "SVN snapshot release $E_SVN_REV" >> $OUTPUT_FILE 2>&1 || exit_error
142         echo " `head -n1 $TMP_DIR/$module/debian/changelog`"
143     done
144 }
145
146 function gen_versions(){
147     if [ ! -d $VERSIONS_DIR ]; then
148         echo -n "Creating versions dir $VERSIONS_DIR ..."
149         mkdir -p $VERSIONS_DIR || exit_error
150         echo " OK"
151     fi
152
153     echo "Generating version files ..."
154     for module in ${ALL_MODULES[@]};do
155         VERSION=`dpkg-parsechangelog -l$TMP_DIR/$module/debian/changelog | grep Version: | cut -d" " -f2 || exit_error`
156         echo "  $module ... $VERSION"
157         echo "$VERSION" > $VERSIONS_DIR/"$module"_version
158     done
159 }
160
161 gen_control(){
162     echo "Generating control files ..."
163     for module in ${ALL_MODULES[@]}; do
164         echo -n "       $module ..."
165         if [ -e $TMP_DIR/$module/debian/control.in ]; then
166             TO_REPLACE=`grep -o -E '@([A-Z]|[0-9])+((-|_)*([A-Z]|[0-9]))*_VERSION@' $TMP_DIR/$module/debian/control.in | cut -d @ -f 2 | sort -u`
167             cp $TMP_DIR/$module/debian/control.in $TMP_DIR/$module/debian/control.temp
168
169             for replacement in $TO_REPLACE; do
170                 replacement_lowercase=`echo $replacement | tr "[:upper:]" "[:lower:]"`
171                 version_file=$VERSIONS_DIR/$replacement_lowercase
172                 if [ ! -e $version_file ]; then
173                     echo -n " Could not find a replacement for $replacement" && exit_error
174                 fi
175                 version_number=`cat $version_file`
176                 echo -n " $replacement: $version_number"
177                 sed -i s/@$replacement@/$version_number/g $TMP_DIR/$module/debian/control.temp
178             done
179
180             mv $TMP_DIR/$module/debian/control.temp $TMP_DIR/$module/debian/control
181         fi
182
183         echo " OK"
184     done
185 }
186
187 gen_src_packages(){
188     echo "Generating source packages ..."
189     for module in ${ALL_MODULES[@]}; do
190         echo -n "       $module ."
191         cd $TMP_DIR/$module || exit_error
192         echo -n "."
193         dpkg-buildpackage -rfakeroot -us -uc -sa -d -S -I.git -I.gitignore -I.svn -I.svnignore -ICVS -I.cvsignore >> $OUTPUT_FILE 2>&1|| exit_error
194         echo -n "."
195         cd - >> $OUTPUT_FILE 2>&1 || exit_error
196         echo " OK"
197     done
198 }
199
200 init
201 checkout_repositories
202 update_changelogs
203 gen_versions
204 gen_control
205 gen_src_packages
206 echo "All done. Packages in $TMP_DIR"
207 exit 0