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