ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/CMSDIST/python.spec
Revision: 1.85
Committed: Thu Apr 19 14:05:13 2012 UTC (13 years ago) by diego
Branch: MAIN
CVS Tags: TW20121025a, bld_1350485088_PHEDEX-lifecycle_slc5_amd64_gcc461, T020120827, HG1208e, HG1208d, HG1208c, HG1207d, TW20120727a, TW20120726a, TW20120725a, HG1208a, TW20120724c, TW20120724b, TW20120724a, TW20120720a, TW20120719a, TW20120718a, HG1207c, TW20120704c, TW20120704b, TW20120704a, TW20120702c, TW20120702b, TW20120702a, TW20120621c, TW20120621a, TW20120620a, HG1207b, HG1207a, HG1206d, TW20120607a, TW20120606a, HG1206c, HG1206b, bld_1337784158_cmsweb-analytics_slc5_amd64_gcc461, bld_1337783687_cmsweb-analytics_slc5_amd64_gcc461, HG1206a, HG1205g, HG1205f, HG1205e, HG1205d, bld_1335521675_crabhb_slc5_amd64_gcc461, HG1205c, HG1205b
Changes since 1.84: +24 -32 lines
Log Message:
Update to version 2.6.8 to include critical security fixes against denial of service attacks due to hash collisions. Note that this change can affect fundamentally broken clients that assume specific order of dictionary elements in json responses; dropped more test files from the final RPM; removed the macosx-64bit patch since a fix is already included in 2.6.8; renamed the other two patches and updated them to 2.6.8; clean up old python-osx patch since it doesnt exist anymore; dropped slc4_ia32 specific bits since we dont support it anymore.

File Contents

# Content
1 ### RPM external python 2.6.8
2 ## INITENV +PATH PATH %i/bin
3 ## INITENV +PATH LD_LIBRARY_PATH %i/lib
4 ## INITENV SETV PYTHON_LIB_SITE_PACKAGES lib/python%{python_major_version}/site-packages
5 ## INITENV SETV PYTHONHASHSEED random
6 # OS X patches and build fudging stolen from fink
7 %{expand:%%define python_major_version %(echo %realversion | cut -d. -f1,2)}
8 %define online %(case %cmsplatf in (*onl_*_*) echo true;; (*) echo false;; esac)
9
10 Requires: expat bz2lib db4 gdbm
11
12 %if "%online" != "true"
13 Requires: zlib openssl sqlite
14 %endif
15
16 # FIXME: readline, crypt
17 # FIXME: gmp, panel, tk/tcl, x11
18
19 Source0: http://www.python.org/ftp/%n/%realversion/Python-%realversion.tgz
20 Patch0: python-dont-detect-dbm
21 Patch1: python-fix-macosx-relocation
22
23 %prep
24 %setup -n Python-%realversion
25 find . -type f | while read f; do
26 if head -n1 $f | grep -q /usr/local; then
27 perl -p -i -e "s|#!.*/usr/local/bin/python|#!/usr/bin/env python|" $f
28 else :; fi
29 done
30 %patch0 -p0
31 %patch1 -p0
32
33 %build
34 # Python is awkward about passing other include or library directories
35 # to it. Basically there is no way to pass anything from configure to
36 # make, or down to python itself. To get python detect the extensions
37 # we want to enable, we simply have to link the contents into python's
38 # own include/lib directories. Ugh.
39 #
40 # NB: It would sort-of make sense to link more stuff from /sw on OS X,
41 # but we simply cannot link the whole world. If you need something,
42 # see above for the commented-out list of packages that could be
43 # linked specifically, or could be built by ourselves, depending on
44 # whether we like to pick up system libraries or want total control.
45 #mkdir -p %i/include %i/lib
46 mkdir -p %i/include %i/lib %i/bin
47
48 %if "%online" != "true"
49 %define extradirs $ZLIB_ROOT $OPENSSL_ROOT $SQLITE_ROOT
50 %else
51 %define extradirs %{nil}
52 %endif
53
54 dirs="$EXPAT_ROOT $BZ2LIB_ROOT $NCURSES_ROOT $DB4_ROOT $GDBM_ROOT %{extradirs}"
55
56 # We need to export it because setup.py now uses it to determine the actual
57 # location of DB4, this was needed to avoid having it picked up from the system.
58 export DB4_ROOT
59
60 # Python's configure parses LDFLAGS and CPPFLAGS to look for aditional library and include directories
61 echo $dirs
62 LDFLAGS=""
63 CPPFLAGS=""
64 for d in $dirs; do
65 LDFLAGS="$LDFLAGS -L $d/lib"
66 CPPFLAGS="$CPPFLAGS -I $d/include"
67 done
68 export LDFLAGS
69 export CPPFLAGS
70
71 additionalConfigureOptions=""
72 case %cmsplatf in
73 osx105* )
74 additionalConfigureOptions="--disable-readline"
75 ;;
76 esac
77
78 ./configure --prefix=%i $additionalConfigureOptions --enable-shared \
79 --without-tkinter --disable-tkinter
80
81 make %makeprocesses
82
83 %install
84 # We need to export it because setup.py now uses it to determine the actual
85 # location of DB4, this was needed to avoid having it picked up from the system.
86 export DB4_ROOT
87 make install
88 %define pythonv %(echo %realversion | cut -d. -f 1,2)
89
90 case %cmsplatf in
91 osx*)
92 make install prefix=%i
93 (cd Misc; /bin/rm -rf RPM)
94 mkdir -p %i/share/doc/%n
95 cp -R Demo Doc %i/share/doc/%n
96 cp -R Misc Tools %i/lib/python%{pythonv}
97 gcc -dynamiclib -all_load -single_module \
98 -framework System -framework CoreServices -framework Foundation \
99 %i/lib/python%{pythonv}/config/libpython%{pythonv}.a \
100 -undefined dynamic_lookup \
101 -o %i/lib/python%{pythonv}/config/libpython%{pythonv}.dylib \
102 -install_name %i/lib/python%{pythonv}/config/libpython%{pythonv}.dylib \
103 -current_version %{pythonv} -compatibility_version %{pythonv} -ldl
104 (cd %i/lib/python%{pythonv}/config
105 perl -p -i -e 's|-fno-common||g' Makefile)
106
107 find %i/lib/python%{pythonv}/config -name 'libpython*' -exec mv -f {} %i/lib \;
108 ;;
109 esac
110
111 perl -p -i -e "s|^#!.*python|#!/usr/bin/env python|" %{i}/bin/idle \
112 %{i}/bin/pydoc \
113 %{i}/bin/python-config \
114 %{i}/bin/2to3 \
115 %{i}/bin/python2.6-config \
116 %{i}/bin/smtpd.py \
117 %{i}/lib/python2.6/bsddb/dbshelve.py \
118 %{i}/lib/python2.6/test/test_bz2.py \
119 %{i}/lib/python2.6/test/test_largefile.py \
120 %{i}/lib/python2.6/test/test_optparse.py
121
122 find %{i}/lib -maxdepth 1 -mindepth 1 ! -name '*python*' -exec rm {} \;
123 find %{i}/include -maxdepth 1 -mindepth 1 ! -name '*python*' -exec rm {} \;
124
125 # remove executable permission anything which is *.py script,
126 # is executable, but does not start with she-bang so not valid
127 # executable; this avoids problems with rpm 4.8+ find-requires
128 find %i -name '*.py' -perm +0111 | while read f; do
129 if head -n1 $f | grep -q '"'; then chmod -x $f; else :; fi
130 done
131
132 # remove tkinter that brings dependency on libtk:
133 find %{i}/lib -type f -name "_tkinter.so" -exec rm {} \;
134
135 # Remove documentation, examples and test files.
136 %define drop_files { %i/share %{i}/lib/python%{pythonv}/test \
137 %{i}/lib/python%{pythonv}/distutils/tests \
138 %{i}/lib/python%{pythonv}/json/tests \
139 %{i}/lib/python%{pythonv}/ctypes/test \
140 %{i}/lib/python%{pythonv}/sqlite3/test \
141 %{i}/lib/python%{pythonv}/bsddb/test \
142 %{i}/lib/python%{pythonv}/email/test \
143 %{i}/lib/python%{pythonv}/lib2to3/tests }
144
145 # Remove .pyo files
146 find %i -name '*.pyo' -exec rm {} \;
147
148 # Generate dependencies-setup.{sh,csh} so init.{sh,csh} picks full environment.
149 mkdir -p %i/etc/profile.d
150 : > %i/etc/profile.d/dependencies-setup.sh
151 : > %i/etc/profile.d/dependencies-setup.csh
152 for tool in $(echo %{requiredtools} | sed -e's|\s+| |;s|^\s+||'); do
153 root=$(echo $tool | tr a-z- A-Z_)_ROOT; eval r=\$$root
154 if [ X"$r" != X ] && [ -r "$r/etc/profile.d/init.sh" ]; then
155 echo "test X\$$root != X || . $r/etc/profile.d/init.sh" >> %i/etc/profile.d/dependencies-setup.sh
156 echo "test X\$$root != X || source $r/etc/profile.d/init.csh" >> %i/etc/profile.d/dependencies-setup.csh
157 fi
158 done
159
160 %post
161 %{relocateConfig}lib/python2.6/config/Makefile
162 %{relocateConfig}etc/profile.d/dependencies-setup.*sh