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