##// END OF EJS Templates
buildrpm: introduce --rpmdir instead of using hardcoded rpmbuild dir...
Mads Kiilerich -
r22437:9e2e4fc5 default
parent child Browse files
Show More
@@ -1,150 +1,153 b''
1 1 #!/bin/sh -e
2 2 #
3 3 # Build a Mercurial RPM from the current repo
4 4 #
5 5 # Tested on
6 6 # - Fedora 20
7 7 # - CentOS 5
8 8 # - centOS 6
9 9
10 10 BUILD=1
11 RPMBUILDDIR="$PWD/rpmbuild"
11 12 while [ "$1" ]; do
12 13 case "$1" in
13 14 --prepare )
14 15 shift
15 16 BUILD=
16 17 ;;
17 18 --withpython | --with-python)
18 19 shift
19 20 PYTHONVER=2.7.8
20 21 ;;
22 --rpmbuilddir )
23 shift
24 RPMBUILDDIR="$1"
25 shift
26 ;;
21 27 * )
22 28 echo "Invalid parameter $1!" 1>&2
23 29 exit 1
24 30 ;;
25 31 esac
26 32 done
27 33
28 34 cd "`dirname $0`/.."
29 35
30 36 specfile=$PWD/contrib/mercurial.spec
31 37 if [ ! -f $specfile ]; then
32 38 echo "Cannot find $specfile!" 1>&2
33 39 exit 1
34 40 fi
35 41
36 42 if [ ! -d .hg ]; then
37 43 echo 'You are not inside a Mercurial repository!' 1>&2
38 44 exit 1
39 45 fi
40 46
41 47 # build local hg and use it
42 48 python setup.py build_py -c -d .
43 49 HG="$PWD/hg"
44 50 PYTHONPATH="$PWD/mercurial/pure"
45 51 export PYTHONPATH
46 52
47 rpmdir="$PWD/rpmbuild"
48
49 rm -rf $rpmdir
50 mkdir -p $rpmdir/SOURCES $rpmdir/SPECS $rpmdir/RPMS $rpmdir/SRPMS $rpmdir/BUILD
53 mkdir -p $RPMBUILDDIR/SOURCES $RPMBUILDDIR/SPECS $RPMBUILDDIR/RPMS $RPMBUILDDIR/SRPMS $RPMBUILDDIR/BUILD
51 54
52 55 hgversion=`$HG version | sed -ne 's/.*(version \(.*\))$/\1/p'`
53 56
54 57 if echo $hgversion | grep -- '-' > /dev/null 2>&1; then
55 58 # nightly build case, version is like 1.3.1+250-20b91f91f9ca
56 59 version=`echo $hgversion | cut -d- -f1`
57 60 release=`echo $hgversion | cut -d- -f2 | sed -e 's/+.*//'`
58 61 else
59 62 # official tag, version is like 1.3.1
60 63 version=`echo $hgversion | sed -e 's/+.*//'`
61 64 release='0'
62 65 fi
63 66 if [ "$PYTHONVER" ]; then
64 67 release=$release+$PYTHONVER
65 68 RPMPYTHONVER=$PYTHONVER
66 69 else
67 70 RPMPYTHONVER=%{nil}
68 71 fi
69 72
70 $HG archive -t tgz $rpmdir/SOURCES/mercurial-$version-$release.tar.gz
73 $HG archive -t tgz $RPMBUILDDIR/SOURCES/mercurial-$version-$release.tar.gz
71 74 if [ "$PYTHONVER" ]; then
72 75 (
73 76 cd build
74 77 PYTHON_SRCFILE=Python-$PYTHONVER.tgz
75 78 [ -f $PYTHON_SRCFILE ] || curl -Lo $PYTHON_SRCFILE http://www.python.org/ftp/python/$PYTHONVER/$PYTHON_SRCFILE
76 ln -f $PYTHON_SRCFILE $rpmdir/SOURCES/$PYTHON_SRCFILE
79 ln -f $PYTHON_SRCFILE $RPMBUILDDIR/SOURCES/$PYTHON_SRCFILE
77 80
78 81 DOCUTILSVER=`sed -ne "s/^%global docutilsname docutils-//p" $specfile`
79 82 DOCUTILS_SRCFILE=docutils-$DOCUTILSVER.tar.gz
80 83 [ -f $DOCUTILS_SRCFILE ] || curl -Lo $DOCUTILS_SRCFILE http://downloads.sourceforge.net/project/docutils/docutils/$DOCUTILSVER/$DOCUTILS_SRCFILE
81 ln -f $DOCUTILS_SRCFILE $rpmdir/SOURCES/$DOCUTILS_SRCFILE
84 ln -f $DOCUTILS_SRCFILE $RPMBUILDDIR/SOURCES/$DOCUTILS_SRCFILE
82 85 )
83 86 fi
84 87
85 rpmspec=$rpmdir/SPECS/mercurial.spec
88 rpmspec=$RPMBUILDDIR/SPECS/mercurial.spec
86 89
87 90 sed -e "s,^Version:.*,Version: $version," \
88 91 -e "s,^Release:.*,Release: $release," \
89 92 $specfile > $rpmspec
90 93
91 94 echo >> $rpmspec
92 95 echo "%changelog" >> $rpmspec
93 96
94 97 if echo $version | grep '+' > /dev/null 2>&1; then
95 98 latesttag="`echo $version | sed -e 's/+.*//'`"
96 99 $HG log -r .:"$latesttag" -fM \
97 100 --template '{date|hgdate}\t{author}\t{desc|firstline}\n' | python -c '
98 101 import sys, time
99 102
100 103 def datestr(date, format):
101 104 return time.strftime(format, time.gmtime(float(date[0]) - date[1]))
102 105
103 106 changelog = []
104 107 for l in sys.stdin.readlines():
105 108 tok = l.split("\t")
106 109 hgdate = tuple(int(v) for v in tok[0].split())
107 110 changelog.append((datestr(hgdate, "%F"), tok[1], hgdate, tok[2]))
108 111 prevtitle = ""
109 112 for l in sorted(changelog, reverse=True):
110 113 title = "* %s %s" % (datestr(l[2], "%a %b %d %Y"), l[1])
111 114 if prevtitle != title:
112 115 prevtitle = title
113 116 print
114 117 print title
115 118 print "- %s" % l[3].strip()
116 119 ' >> $rpmspec
117 120
118 121 else
119 122
120 123 $HG log \
121 124 --template '{date|hgdate}\t{author}\t{desc|firstline}\n' \
122 125 .hgtags | python -c '
123 126 import sys, time
124 127
125 128 def datestr(date, format):
126 129 return time.strftime(format, time.gmtime(float(date[0]) - date[1]))
127 130
128 131 for l in sys.stdin.readlines():
129 132 tok = l.split("\t")
130 133 hgdate = tuple(int(v) for v in tok[0].split())
131 134 print "* %s %s\n- %s" % (datestr(hgdate, "%a %b %d %Y"), tok[1], tok[2])
132 135 ' >> $rpmspec
133 136
134 137 fi
135 138
136 139 sed -i \
137 140 -e "s/^%define withpython.*$/%define withpython $RPMPYTHONVER/" \
138 141 $rpmspec
139 142
140 143 if [ "$BUILD" ]; then
141 rpmbuild --define "_topdir $rpmdir" -ba $rpmspec --clean
144 rpmbuild --define "_topdir $RPMBUILDDIR" -ba $rpmspec --clean
142 145 if [ $? = 0 ]; then
143 146 echo
144 147 echo "Built packages for $version-$release:"
145 find $rpmdir/*RPMS/ -type f -newer $rpmspec
148 find $RPMBUILDDIR/*RPMS/ -type f -newer $rpmspec
146 149 fi
147 150 else
148 echo "Prepared sources for $version-$release $rpmspec are in $rpmdir/SOURCES/ - use like:"
149 echo "rpmbuild --define '_topdir $rpmdir' -ba $rpmspec --clean"
151 echo "Prepared sources for $version-$release $rpmspec are in $RPMBUILDDIR/SOURCES/ - use like:"
152 echo "rpmbuild --define '_topdir $RPMBUILDDIR' -ba $rpmspec --clean"
150 153 fi
General Comments 0
You need to be logged in to leave comments. Login now