Skip to content

Commit 19ee74b

Browse files
committedOct 9, 2017
Better RPM generation, add support for unstable builds
1 parent e30cc31 commit 19ee74b

File tree

4 files changed

+112
-28
lines changed

4 files changed

+112
-28
lines changed
 

‎rpm/.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
result
2-
*.tar.gz
2+
*.tar.bz2
33
local.cfg
44
version.cfg
55
qgis.spec

‎rpm/README.md

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
## QGIS RPM generator
2+
3+
### Build RPM using mock
4+
5+
```bash
6+
$ ./buildrpms.sh
7+
```
8+
9+
### Generate a valid spec file from template
10+
11+
```bash
12+
$ ./buildrpms.sh -c
13+
```
14+
15+
### Build SRPM using mock
16+
17+
```bash
18+
$ ./buildrpms.sh -s
19+
```
20+
21+
### Rebuild last generated RPM using mock
22+
23+
```bash
24+
$ ./buildrpms.sh -b
25+
```
26+
27+
### Build an unstable release
28+
29+
```bash
30+
$ ./buildrpms.sh [flags] -u
31+
```
32+
33+
This generates an RPM with release `.git<short commit ID>`
34+
35+
36+
### MOCK old chroot
37+
38+
It is possible to execute `mock` using the 'old chroot' behaviour (which does not uses `systemd-nspawn`) setting
39+
the environment variable `_MOCK_OLD_CHROOT` before running `buildrpms.sh`:
40+
41+
```bash
42+
export _MOCK_OLD_CHROOT=1
43+
```
44+
45+
This may be useful when running `mock` inside environments that do not play well with `systemd-nspawn` (LXC/LXD, Docker...).

‎rpm/buildrpms.sh

Lines changed: 58 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -30,21 +30,36 @@ function print_help
3030
Creates RPM packages.
3131
3232
Usage:
33+
-c only compile spec file
3334
-s only create srpm, nothing will be compiled
35+
-u build unstable, release will include the short commit id
3436
-b build last srpm, the package release number will not be increased
3537
-h show help
3638
'
3739
}
3840

41+
if [ $_MOCK_OLD_CHROOT ]
42+
then
43+
mock_args="--old-chroot"
44+
fi
45+
46+
compile_spec_only=0
3947
build_only=0
4048
srpm_only=0
49+
build_unstable=0
4150

42-
while getopts "shb" opt; do
51+
while getopts "csuhb" opt; do
4352
case ${opt} in
53+
c)
54+
compile_spec_only=1
55+
;;
4456
s)
4557
srpm_only=1
4658
;;
47-
[\?|h])
59+
u)
60+
build_unstable=1
61+
;;
62+
\?|h)
4863
print_help
4964
exit 0
5065
;;
@@ -62,16 +77,23 @@ then
6277
source local.cfg
6378
fi
6479

65-
# Get next release version number and increment after
66-
if [ ! -f version.cfg ]
67-
then
68-
echo "RELVER=1" > version.cfg
69-
fi
70-
source version.cfg
71-
if [ "$build_only" -ne "1" ]
80+
if [ $build_unstable -ne 1 ]
7281
then
73-
let RELVER+=1
74-
echo "RELVER=$RELVER" > version.cfg
82+
# Get next release version number and increment after
83+
if [ ! -f version.cfg ]
84+
then
85+
echo "relver=1" > version.cfg
86+
fi
87+
source version.cfg
88+
if [ "$build_only" -ne "1" ]
89+
then
90+
let relver+=1
91+
echo "relver=$relver" > version.cfg
92+
fi
93+
timestamp=1
94+
else
95+
relver="git$(git rev-parse --short HEAD)"
96+
timestamp=$(date +'%s')
7597
fi
7698

7799
# Clean logfiles
@@ -91,28 +113,33 @@ patch=$(grep -e 'SET(CPACK_PACKAGE_VERSION_PATCH' ../CMakeLists.txt |
91113

92114
version=$(echo $major.$minor.$patch)
93115

94-
timestamp=$(date +'%s')
95-
96-
print_info "Building version $version-$RELVER"
97-
116+
print_info "Building version $version-$relver"
98117
if [ "$build_only" -ne "1" ]
99118
then
100-
# Current git branch name
101-
branch=$(git branch --no-color 2> /dev/null |
102-
sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/')
119+
print_info "Creating spec file from template"
120+
# Create spec file
121+
cat qgis.spec.template \
122+
| sed -e s/%{_version}/$version/g \
123+
| sed -e s/%{_relver}/$relver/g \
124+
| sed -e s/%{_timestamp}/$timestamp/g \
125+
| tee qgis.spec 1>/dev/null
126+
127+
if [ "$compile_spec_only" -eq "1" ]
128+
then
129+
exit 0
130+
fi
103131

104132
print_info "Creating source tarball"
105133
# Create source tarball
106-
git -C .. archive --format=tar --prefix=qgis-$version/ $BRANCH | bzip2 > sources/qgis-$version.tar.bz2
134+
git -C .. archive --format=tar --prefix=qgis-$version/ HEAD | bzip2 > sources/qgis-$version.tar.bz2
107135

108136
print_info "Creating source package"
109-
# Create spec file
110-
cat qgis.spec.template | sed -e s/%{_version}/$version/g \
111-
| sed -e s/%{_relver}/$RELVER/g \
112-
| sed -e s/%{_timestamp}/$timestamp/g \
113-
| tee qgis.spec 1>/dev/null
114137
# Build source package
115-
mock --buildsrpm --spec qgis.spec --sources ./sources --define "_relver $RELVER" --define "_version $version" --resultdir=$OUTDIR
138+
mock --buildsrpm --spec qgis.spec --sources ./sources \
139+
--define "_relver $relver" \
140+
--define "_version $version" \
141+
--define "_timestamp $timestamp" \
142+
--resultdir=$OUTDIR $mock_args
116143
if [ $? -ne 0 ]
117144
then
118145
print_error "Creating source package failed"
@@ -140,11 +167,15 @@ do :
140167
rm $OUTDIR/$arch/build.log
141168
fi
142169
mkdir $OUTDIR/$arch
143-
mock -r $arch --rebuild $OUTDIR/$srpm --define "_relver $RELVER" --define "_version $version" --resultdir=$OUTDIR/$arch
170+
mock -r $arch --rebuild $OUTDIR/$srpm \
171+
--define "_relver $relver" \
172+
--define "_version $version" \
173+
--define "_timestamp $timestamp" \
174+
--resultdir=$OUTDIR/$arch $mock_args
144175
if [ $? -eq 0 ]
145176
then
146177
# Add to package list
147-
packages="$packages $(ls $OUTDIR/$arch/*-$version-$RELVER.*.rpm)"
178+
packages="$packages $(ls $OUTDIR/$arch/*-$version-$relver.*.rpm)"
148179
else
149180
print_error "Package creation for $arch failed. Abort"
150181
exit 1

‎rpm/qgis.spec.template

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
# vi:syntax=spec
22
# TODO: Run test suite (see debian/rules)
33

4+
# Template variables
5+
# - _version
6+
# - _relver
7+
# - _timestamp (optional)
8+
49
Name: qgis
510
Version: %{_version}
611
Release: %{_relver}%{?dist}
@@ -10,6 +15,9 @@ Group: Applications/Engineering
1015
License: GPLv3+ with exceptions
1116
URL: http://www.qgis.org
1217

18+
# Epoch is used when building packages from master, otherwise is set to 1
19+
Epoch: %{_timestamp}
20+
1321
Source0: http://qgis.org/downloads/%{name}-%{version}.tar.bz2
1422

1523
# Sample configuration files for QGIS server

0 commit comments

Comments
 (0)
Please sign in to comment.