##// END OF EJS Templates
packaging: make python snippets in rpm building python3 compatible...
Mads Kiilerich -
r43648:e0812b03 stable
parent child Browse files
Show More
@@ -1,160 +1,160 b''
1 1 #!/bin/bash -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 . $(dirname $0)/packagelib.sh
11 11
12 12 BUILD=1
13 13 RPMBUILDDIR="$PWD/rpmbuild"
14 14
15 15 while [ "$1" ]; do
16 16 case "$1" in
17 17 --prepare )
18 18 shift
19 19 BUILD=
20 20 ;;
21 21 --withpython | --with-python)
22 22 shift
23 23 PYTHONVER=2.7.16
24 24 PYTHONMD5=f1a2ace631068444831d01485466ece0
25 25 ;;
26 26 --rpmbuilddir )
27 27 shift
28 28 RPMBUILDDIR="$1"
29 29 shift
30 30 ;;
31 31 * )
32 32 echo "Invalid parameter $1!" 1>&2
33 33 exit 1
34 34 ;;
35 35 esac
36 36 done
37 37
38 38 cd "`dirname $0`/../.."
39 39
40 40 specfile=$PWD/contrib/packaging/mercurial.spec
41 41 if [ ! -f $specfile ]; then
42 42 echo "Cannot find $specfile!" 1>&2
43 43 exit 1
44 44 fi
45 45
46 46 if [ ! -d .hg ]; then
47 47 echo 'You are not inside a Mercurial repository!' 1>&2
48 48 exit 1
49 49 fi
50 50
51 51 gethgversion
52 52
53 53 if [ -z "$type" ] ; then
54 54 release=1
55 55 else
56 56 release=0.9_$type
57 57 fi
58 58
59 59 if [ -n "$distance" ] ; then
60 60 release=$release+${distance}_${node}
61 61 fi
62 62
63 63 if [ "$PYTHONVER" ]; then
64 64 release=$release+$PYTHONVER
65 65 RPMPYTHONVER=$PYTHONVER
66 66 else
67 67 RPMPYTHONVER=%{nil}
68 68 fi
69 69
70 70 mkdir -p $RPMBUILDDIR/{SOURCES,BUILD,SRPMS,RPMS}
71 71 $HG archive -t tgz $RPMBUILDDIR/SOURCES/mercurial-$version-$release.tar.gz
72 72 if [ "$PYTHONVER" ]; then
73 73 (
74 74 mkdir -p build
75 75 cd build
76 76 PYTHON_SRCFILE=Python-$PYTHONVER.tgz
77 77 [ -f $PYTHON_SRCFILE ] || curl -Lo $PYTHON_SRCFILE http://www.python.org/ftp/python/$PYTHONVER/$PYTHON_SRCFILE
78 78 if [ "$PYTHONMD5" ]; then
79 79 echo "$PYTHONMD5 $PYTHON_SRCFILE" | md5sum -w -c
80 80 fi
81 81 ln -f $PYTHON_SRCFILE $RPMBUILDDIR/SOURCES/$PYTHON_SRCFILE
82 82
83 83 DOCUTILSVER=`sed -ne "s/^%global docutilsname docutils-//p" $specfile`
84 84 DOCUTILS_SRCFILE=docutils-$DOCUTILSVER.tar.gz
85 85 [ -f $DOCUTILS_SRCFILE ] || curl -Lo $DOCUTILS_SRCFILE http://downloads.sourceforge.net/project/docutils/docutils/$DOCUTILSVER/$DOCUTILS_SRCFILE
86 86 DOCUTILSMD5=`sed -ne "s/^%global docutilsmd5 //p" $specfile`
87 87 if [ "$DOCUTILSMD5" ]; then
88 88 echo "$DOCUTILSMD5 $DOCUTILS_SRCFILE" | md5sum -w -c
89 89 fi
90 90 ln -f $DOCUTILS_SRCFILE $RPMBUILDDIR/SOURCES/$DOCUTILS_SRCFILE
91 91 )
92 92 fi
93 93
94 94 mkdir -p $RPMBUILDDIR/SPECS
95 95 rpmspec=$RPMBUILDDIR/SPECS/mercurial.spec
96 96
97 97 sed -e "s,^Version:.*,Version: $version," \
98 98 -e "s,^Release:.*,Release: $release," \
99 99 $specfile > $rpmspec
100 100
101 101 echo >> $rpmspec
102 102 echo "%changelog" >> $rpmspec
103 103
104 104 if echo $version | grep '+' > /dev/null 2>&1; then
105 105 latesttag="`echo $version | sed -e 's/+.*//'`"
106 106 $HG log -r .:"$latesttag" -fM \
107 107 --template '{date|hgdate}\t{author}\t{desc|firstline}\n' | python -c '
108 108 import sys, time
109 109
110 110 def datestr(date, format):
111 111 return time.strftime(format, time.gmtime(float(date[0]) - date[1]))
112 112
113 113 changelog = []
114 114 for l in sys.stdin.readlines():
115 115 tok = l.split("\t")
116 116 hgdate = tuple(int(v) for v in tok[0].split())
117 117 changelog.append((datestr(hgdate, "%F"), tok[1], hgdate, tok[2]))
118 118 prevtitle = ""
119 119 for l in sorted(changelog, reverse=True):
120 120 title = "* %s %s" % (datestr(l[2], "%a %b %d %Y"), l[1])
121 121 if prevtitle != title:
122 122 prevtitle = title
123 123 print
124 print title
125 print "- %s" % l[3].strip()
124 print(title)
125 print("- %s" % l[3].strip())
126 126 ' >> $rpmspec
127 127
128 128 else
129 129
130 130 $HG log \
131 131 --template '{date|hgdate}\t{author}\t{desc|firstline}\n' \
132 132 .hgtags | python -c '
133 133 import sys, time
134 134
135 135 def datestr(date, format):
136 136 return time.strftime(format, time.gmtime(float(date[0]) - date[1]))
137 137
138 138 for l in sys.stdin.readlines():
139 139 tok = l.split("\t")
140 140 hgdate = tuple(int(v) for v in tok[0].split())
141 print "* %s %s\n- %s" % (datestr(hgdate, "%a %b %d %Y"), tok[1], tok[2])
141 print("* %s %s\n- %s" % (datestr(hgdate, "%a %b %d %Y"), tok[1], tok[2]))
142 142 ' >> $rpmspec
143 143
144 144 fi
145 145
146 146 sed -i \
147 147 -e "s/^%define withpython.*$/%define withpython $RPMPYTHONVER/" \
148 148 $rpmspec
149 149
150 150 if [ "$BUILD" ]; then
151 151 rpmbuild --define "_topdir $RPMBUILDDIR" -ba $rpmspec --clean
152 152 if [ $? = 0 ]; then
153 153 echo
154 154 echo "Built packages for $version-$release:"
155 155 find $RPMBUILDDIR/*RPMS/ -type f -newer $rpmspec
156 156 fi
157 157 else
158 158 echo "Prepared sources for $version-$release $rpmspec are in $RPMBUILDDIR/SOURCES/ - use like:"
159 159 echo "rpmbuild --define '_topdir $RPMBUILDDIR' -ba $rpmspec --clean"
160 160 fi
@@ -1,164 +1,164 b''
1 1 %global emacs_lispdir %{_datadir}/emacs/site-lisp
2 2
3 3 %define withpython %{nil}
4 4
5 5 %if "%{?withpython}"
6 6
7 7 %global pythonver %{withpython}
8 8 %global pythonname Python-%{withpython}
9 9 %global docutilsname docutils-0.14
10 10 %global docutilsmd5 c53768d63db3873b7d452833553469de
11 11 %global pythonhg python-hg
12 12 %global hgpyprefix /opt/%{pythonhg}
13 13 # byte compilation will fail on some some Python /test/ files
14 14 %global _python_bytecompile_errors_terminate_build 0
15 15
16 16 %else
17 17
18 %global pythonver %(python -c 'import sys;print ".".join(map(str, sys.version_info[:2]))')
18 %global pythonver %(python -c 'import sys;print(".".join(map(str, sys.version_info[:2])))')
19 19
20 20 %endif
21 21
22 22 Summary: A fast, lightweight Source Control Management system
23 23 Name: mercurial
24 24 Version: snapshot
25 25 Release: 0
26 26 License: GPLv2+
27 27 Group: Development/Tools
28 28 URL: https://mercurial-scm.org/
29 29 Source0: %{name}-%{version}-%{release}.tar.gz
30 30 %if "%{?withpython}"
31 31 Source1: %{pythonname}.tgz
32 32 Source2: %{docutilsname}.tar.gz
33 33 %endif
34 34 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
35 35
36 36 BuildRequires: make, gcc, gettext
37 37 %if "%{?withpython}"
38 38 BuildRequires: readline-devel, openssl-devel, ncurses-devel, zlib-devel, bzip2-devel
39 39 %else
40 40 BuildRequires: python >= 2.7, python-devel, python-docutils >= 0.5
41 41 Requires: python >= 2.7
42 42 %endif
43 43 # The hgk extension uses the wish tcl interpreter, but we don't enforce it
44 44 #Requires: tk
45 45
46 46 %description
47 47 Mercurial is a fast, lightweight source control management system designed
48 48 for efficient handling of very large distributed projects.
49 49
50 50 %prep
51 51
52 52 %if "%{?withpython}"
53 53 %setup -q -n mercurial-%{version}-%{release} -a1 -a2
54 54 # despite the comments in cgi.py, we do this to prevent rpmdeps from picking /usr/local/bin/python up
55 55 sed -i '1c#! /usr/bin/env python' %{pythonname}/Lib/cgi.py
56 56 %else
57 57 %setup -q -n mercurial-%{version}-%{release}
58 58 %endif
59 59
60 60 %build
61 61
62 62 %if "%{?withpython}"
63 63
64 64 PYPATH=$PWD/%{pythonname}
65 65 cd $PYPATH
66 66 ./configure --prefix=%{hgpyprefix}
67 67 make all %{?_smp_mflags}
68 68 cd -
69 69
70 70 cd %{docutilsname}
71 71 LD_LIBRARY_PATH=$PYPATH $PYPATH/python setup.py build
72 72 cd -
73 73
74 74 # verify Python environment
75 75 LD_LIBRARY_PATH=$PYPATH PYTHONPATH=$PWD/%{docutilsname} $PYPATH/python -c 'import sys, zlib, bz2, ssl, curses, readline'
76 76
77 77 # set environment for make
78 78 export PATH=$PYPATH:$PATH
79 79 export LD_LIBRARY_PATH=$PYPATH
80 80 export CFLAGS="-L $PYPATH"
81 81 export PYTHONPATH=$PWD/%{docutilsname}
82 82
83 83 %endif
84 84
85 85 make all
86 86 make -C contrib/chg
87 87
88 88 %install
89 89 rm -rf $RPM_BUILD_ROOT
90 90
91 91 %if "%{?withpython}"
92 92
93 93 PYPATH=$PWD/%{pythonname}
94 94 cd $PYPATH
95 95 make install DESTDIR=$RPM_BUILD_ROOT
96 96 # these .a are not necessary and they are readonly and strip fails - kill them!
97 97 rm -f %{buildroot}%{hgpyprefix}/lib/{,python2.*/config}/libpython2.*.a
98 98 cd -
99 99
100 100 cd %{docutilsname}
101 101 LD_LIBRARY_PATH=$PYPATH $PYPATH/python setup.py install --root="$RPM_BUILD_ROOT"
102 102 cd -
103 103
104 104 PATH=$PYPATH:$PATH LD_LIBRARY_PATH=$PYPATH make install DESTDIR=$RPM_BUILD_ROOT PREFIX=%{hgpyprefix} MANDIR=%{_mandir}
105 105 mkdir -p $RPM_BUILD_ROOT%{_bindir}
106 106 ( cd $RPM_BUILD_ROOT%{_bindir}/ && ln -s ../..%{hgpyprefix}/bin/hg . )
107 107 ( cd $RPM_BUILD_ROOT%{_bindir}/ && ln -s ../..%{hgpyprefix}/bin/python2.? %{pythonhg} )
108 108
109 109 %else
110 110
111 111 make install DESTDIR=$RPM_BUILD_ROOT PREFIX=%{_prefix} MANDIR=%{_mandir}
112 112
113 113 %endif
114 114
115 115 install -m 755 contrib/chg/chg $RPM_BUILD_ROOT%{_bindir}/
116 116 install -m 755 contrib/hgk $RPM_BUILD_ROOT%{_bindir}/
117 117 install -m 755 contrib/hg-ssh $RPM_BUILD_ROOT%{_bindir}/
118 118
119 119 bash_completion_dir=$RPM_BUILD_ROOT%{_sysconfdir}/bash_completion.d
120 120 mkdir -p $bash_completion_dir
121 121 install -m 644 contrib/bash_completion $bash_completion_dir/mercurial.sh
122 122
123 123 zsh_completion_dir=$RPM_BUILD_ROOT%{_datadir}/zsh/site-functions
124 124 mkdir -p $zsh_completion_dir
125 125 install -m 644 contrib/zsh_completion $zsh_completion_dir/_mercurial
126 126
127 127 mkdir -p $RPM_BUILD_ROOT%{emacs_lispdir}
128 128 install -m 644 contrib/mercurial.el $RPM_BUILD_ROOT%{emacs_lispdir}/
129 129 install -m 644 contrib/mq.el $RPM_BUILD_ROOT%{emacs_lispdir}/
130 130
131 131 mkdir -p $RPM_BUILD_ROOT/%{_sysconfdir}/mercurial/hgrc.d
132 132
133 133 %clean
134 134 rm -rf $RPM_BUILD_ROOT
135 135
136 136 %files
137 137 %defattr(-,root,root,-)
138 138 %doc CONTRIBUTORS COPYING doc/README doc/hg*.txt doc/hg*.html *.cgi contrib/*.fcgi
139 139 %doc %attr(644,root,root) %{_mandir}/man?/hg*
140 140 %doc %attr(644,root,root) contrib/*.svg
141 141 %dir %{_datadir}/zsh/
142 142 %dir %{_datadir}/zsh/site-functions/
143 143 %{_datadir}/zsh/site-functions/_mercurial
144 144 %dir %{_datadir}/emacs/site-lisp/
145 145 %{_datadir}/emacs/site-lisp/mercurial.el
146 146 %{_datadir}/emacs/site-lisp/mq.el
147 147 %{_bindir}/hg
148 148 %{_bindir}/chg
149 149 %{_bindir}/hgk
150 150 %{_bindir}/hg-ssh
151 151 %dir %{_sysconfdir}/bash_completion.d/
152 152 %config(noreplace) %{_sysconfdir}/bash_completion.d/mercurial.sh
153 153 %dir %{_sysconfdir}/mercurial
154 154 %dir %{_sysconfdir}/mercurial/hgrc.d
155 155 %if "%{?withpython}"
156 156 %{_bindir}/%{pythonhg}
157 157 %{hgpyprefix}
158 158 %else
159 159 %{_libdir}/python%{pythonver}/site-packages/%{name}-*-py%{pythonver}.egg-info
160 160 %{_libdir}/python%{pythonver}/site-packages/%{name}
161 161 %{_libdir}/python%{pythonver}/site-packages/hgext
162 162 %{_libdir}/python%{pythonver}/site-packages/hgext3rd
163 163 %{_libdir}/python%{pythonver}/site-packages/hgdemandimport
164 164 %endif
General Comments 0
You need to be logged in to leave comments. Login now