]> git.pld-linux.org Git - packages/chromium-browser.git/blob - update-source.sh
extract_version: handle .tar.gz urls
[packages/chromium-browser.git] / update-source.sh
1 #!/bin/sh
2 # Usage:
3 # ./update-source.sh
4 # env variables controlling behaviour
5 #  build_package=[0|1] - build package when new version is fetched
6 #  prep_package=[0|1] - check if package can be unpacked (implies build_package)
7 #  publish_packages=[0|1] - publish built packages in ~/public_html/$dist/$arch
8 #  quiet=[0|1] - discard stdout of process
9
10 test "$prep_package" = 0 && build_package=0
11
12 pkg=chromium-browser
13 specfile=$pkg.spec
14
15 # work in package dir
16 dir=$(dirname "$0")
17 cd "$dir"
18 dir=$(pwd)
19
20 # extract version components from url
21 # exports: $version; $release; $svndate; $svnver
22 extract_version() {
23         local url=$1 part
24
25         part=${url#${pkg}[_-]}
26         if [[ $version = *~* ]]; then
27                 # ubuntu urls
28                 version=${part%~*}; part=${part#*${version}~}
29         else
30                 version=${part%.tar.*}; part=${part#*${version}.tar.*}
31         fi
32
33         # release always 1 :)
34         release=1
35         if [ "$part" != "${part%%svn*}" ]; then
36                 svndate=${part#svn*}; svndate=${svndate%%r*}
37                 part=${part#svn${svndate}}
38         else
39                 svndate='%{nil}'
40         fi
41         svnver=${part#r}; svnver=${svnver%%.*}
42
43         : version=$version release=$release svnver=$svnver
44 }
45
46 url2version() {
47         local url=$1
48
49         echo "${url}" | sed -e "
50                 s,$version,%{version},g
51                 s,$release,%{release},g
52                 s,$svndate,%{svndate},g
53                 s,$svnver,%{svnver},g
54         "
55 }
56
57 # setup url from template
58 version2url() {
59         local url=$1
60
61         echo "${url}" | sed -e "
62                 s,%{version},$version,g
63                 s,%{release},$release,g
64                 s,%{svndate},$svndate,g
65                 s,%{svnver},$svnver,g
66         "
67 }
68
69 # abort on errors
70 set -e
71
72 # setup $quiet, you may override with env it
73 quiet=${quiet:-$(tty -s && echo 0 || echo 1)}
74 if [ "$quiet" = "1" ]; then
75         # we do not want output when running on cron
76         exec 1>/dev/null
77 fi
78
79 # take baseurl from .spec Source0
80 baseurl=$(awk '/^Source0:/{print $2}' $specfile | xargs dirname)
81
82 if [ "$1" ]; then
83         url=$1
84 else
85         if [ ! -x /usr/bin/lynx ]; then
86                 echo >&2 "${1##*/}: need lynx to parse sources"
87                 exit 1
88         fi
89         echo "Fetching latest tarball name..."
90         urls=$(lynx -width 200 -dump $baseurl/ | awk '/[0-9]+\. .*\.tar/{print $NF}')
91         # unescape "~" encoded by lighttpd
92         url=$(echo "$urls" | sed -e 's,%7e,~,gi' | sort -Vr | head -n1)
93 fi
94
95 if [ -z "$url" ]; then
96         echo >&2 "URL empty..."
97         exit 1
98 fi
99
100 tarball=${url##*/}
101 echo "tarball: $tarball..."
102
103
104 if [ ! -f $tarball ]; then
105         if [ ! -x /usr/bin/wget ]; then
106                 echo >&2 "${1##*/}: need wget to fetch tarball"
107                 exit 1
108         fi
109         wget $(test "$quiet" = "1" && echo -q) -c $url
110 fi
111
112 extract_version $tarball
113 url_tpl=$(url2version $tarball)
114
115 svndate=$(awk '/^%define[       ]+svndate[      ]+/{print $NF}' $specfile)
116 svnver=$(awk '/^%define[        ]+svnver[       ]+/{print $NF}' $specfile)
117 version=$(awk '/^Version:[      ]+/{print $NF}' $specfile)
118 rel=$(awk '/^%define[   ]+rel[  ]+/{print $NF}' $specfile)
119 if [ "$svndate" = "%{nil}" ]; then
120         svndate=
121 fi
122
123 newtar=$(version2url $url_tpl)
124
125 if [ "$newtar" = "$tarball" ]; then
126         echo "$specfile already up to $newtar"
127
128         # if we don't publish result, there's nothing more to do
129         if [ "$publish_packages" != 1 ]; then
130                 exit 0
131         fi
132 else
133         echo "Updating $specfile to $tarball"
134         extract_version $tarball
135
136         sed -i -e "
137                 s/^\(%define[ \t]\+svnver[ \t]\+\)[0-9]\+\$/\1$svnver/
138                 s/^\(%define[ \t]\+svndate[ \t]\+\).\+\$/\1$svndate/
139                 s/^\(%define[ \t]\+rel[ \t]\+\)[0-9]\+\$/\1$release/
140                 s/^\(Version:[ \t]\+\)[.0-9]\+\$/\1$version/
141         " $specfile
142
143         ../builder --no-init -ncs -5 $specfile
144 fi
145
146 # if we don't build. we're done
147 if [ "$prep_package" = 0 ]; then
148         exit 0
149 fi
150
151 dist=$(rpm -E %{pld_release})
152 arch=$(rpm -E %{_host_cpu})
153 outdir=$(readlink -f $dir)/BUILD-$dist-$arch
154 logfile=$outdir/$pkg.log
155 rpmdir=$outdir/RPMS
156 rpmdest=~/public_html/chromium-browser/$dist/$arch
157 install -d $rpmdir
158
159 # if already published?
160 if [ "$publish_packages" = 1 ]; then
161         pkg=$rpmdest/$pkg-$version-${svnver:+0.$svnver.}$release.$arch.rpm
162         if [ -f "$pkg" ]; then
163                 exit 0
164         fi
165 fi
166
167 command=-bp
168 test "$build_package" = 1 && command=-bb
169         rpmbuild $command --clean \
170         --define "_unpackaged_files_terminate_build 1" \
171         --define '_enable_debug_packages 0' \
172         --define "_topdir $dir" \
173         --define "_specdir $dir" \
174         --define "_sourcedir $dir" \
175         --define "_builddir $outdir" \
176         --define "_rpmdir $rpmdir" \
177         --without debuginfo \
178         --with verbose \
179         $specfile > $logfile 2>&1 || {
180         echo >&2 "Package build failed"
181         tail -n 1000 $logfile >&2
182         exit 1
183 }
184
185 if [ "$publish_packages" = 1 ] && [ "$(ls $rpmdir/*.rpm 2>/dev/null)" ]; then
186         install -d $rpmdest
187         umask 022
188         chmod 644 $rpmdir/*.rpm
189         mv -v $rpmdir/*.rpm $rpmdest/
190         poldek --cachedir=$HOME/tmp --mkidx -s $rpmdest/ --mt=pndir
191
192         if [ -x /usr/bin/createrepo ]; then
193                 install -d $rpmdest/repodata/cache
194                 createrepo -q -c $rpmdest/repodata/cache $rpmdest
195         fi
196 fi
This page took 0.08885 seconds and 4 git commands to generate.