Revision: | 1.82 |
Committed: | Wed Mar 7 08:43:49 2012 UTC (13 years, 1 month ago) by davidlt |
Branch: | MAIN |
CVS Tags: | davidlt_20120715_1023-60X-osx107, davidlt_20120715_1022-60X-slc6, davidlt_20120715_1021-60X, davidlt_20120714_2227-60X-osx107, davidlt_20120714_2232-60X-slc6, davidlt_20120714_2229-60X, CMSSW_6_0_0_pre8-slc6, CMSSW_6_0_0_pre8-osx107, davidlt_20120712_1111-60X-slc6, davidlt_20120712_1109-60X-osx107, davidlt_20120712_1054-60X, ForCMSSW_6_0_0_pre8-slc6_amd64_gcc462, daForCMSSW_6_0_0_pre8-osx107_amd64_gcc462, CMSSW_6_0_0_pre8, daForCMSSW_6_0_0_pre8-slc5_amd64_gcc462, davidlt_20120710_1803-60X-osx107, davidlt_20120710_1802-60X-slc6, davidlt_20120710_1759-60X, davidlt_20120709_0949-60X-osx107, davidlt_20120709_0947-60X-slc6, davidlt_20120709_0944-60X, davidlt_20120630_1032-60X, davidlt_20120629_1426-60X-osx107, davidlt_20120629_1422-60X-slc6, davidlt_20120629_1321-60X, davidlt_20120627_1636-60X-slc6, davidlt_20120627_1635-60X-osx107, davidlt_20120627_1632-60X, davidlt_20120627_1115-60X-slc6, davidlt_20120627_1106-60X-osx107, davidlt_20120627_1102-60X, davidlt_20120625_1026-60X-osx107, davidlt_20120625_1025-60X-slc6, davidlt_20120625_1016-60X, CMSSW_6_0_0_pre7-osx107, CMSSW_6_0_0_pre7-slc6, daForCMSSW_6_0_0_pre7-osx107_amd64_gcc462, ForCMSSW_6_0_0_pre7-slc6_amd64_gcc462, CMSSW_6_0_0_pre7, daForCMSSW_6_0_0_pre7-slc5_amd64_gcc462, davidlt_20120614_2144-CMSSW_6_0_0_pre6, davidlt_20120611_1736-CMSSW_6_0_0_pre6, davidlt_20120608_1759-60X-slc6, davidlt_20120608_1756-60X-osx107, davidlt_20120608_1436-60X, CMSSW_6_0_0_pre6Nmix, daForCMSSW_6_0_0_pre6Nmix-slc5_amd64_gcc462, CMSSW_6_0_0_pre6g495p01, daForCMSSW_6_0_0_pre6g495p01-slc5_amd64_gcc462, davidlt_20120607_1755-60X, davidlt_20120607_1041-60X-osx107, davidlt_20120607_1039-60X-slc6, davidlt_20120607_1035-60X, ge20120605, CMSSW_6_0_0_pre6-slc6, CMSSW_6_0_0_pre6-osx107, CMSSW_6_0_0_pre6, daForCMSSW_6_0_0_pre6-osx107_amd64_gcc462, ForCMSSW_6_0_0_pre6-slc6_amd64_gcc462, daForCMSSW_6_0_0_pre6-slc5_amd64_gcc462, davidlt_20120531_1114-60X-osx107, davidlt_20120531_1112-60X-slc6, davidlt_20120531_1110-60X, davidlt_20120529_1108-60X, davidlt_20120529_1112-60X-slc6, davidlt_20120529_1113-60X-osx107, davidlt_20120528_1234-60X-osx107, davidlt_20120528_1232-60X-slc6, davidlt_20120528_1228-60X, davidlt_20120525_0906-60X-slc6, davidlt_20120525_0901-60X-osx107, davidlt_20120524_1535-60X, davidlt_20120523_1319-60X-slc6, davidlt_20120523_1316-60X-osx107, davidlt_20120523_1311-60X, CMSSW_6_0_0_pre5-osx107, CMSSW_6_0_0_pre5-slc6, davidltForCMSSW_6_0_0_pre5-osx107_amd64_gcc462, ForCMSSW_6_0_0_pre5-slc6_amd64_gcc462, CMSSW_6_0_0_pre5, sm120518-60X-slc6, sm120518-60X-osx107, sm120518-60X, sm120508a-60X-osx107, sm120508a-60X, sm120518a-52X-slc6, sm120518-53X-slc6, sm120508-60X-slc6, sm120508-60X-osx107, sm120508-60X, sm120508-slc6, sm120508-osx107, daForCMSSW_6_0_0_pre5-slc5_amd64_gcc462, davidlt_20120514_1045-60X, davidlt_20120514_1054-60X-slc6, davidlt_20120514_1057-60X-osx107, davidlt_20120510_1929-60X, davidlt_20120510_1028-60X-osx107, davidlt_20120510_1008-60X-slc6, davidlt_test_6, CMSSW_6_0_0_pre4-slc6, ge20120508-slc6, ForCMSSW_6_0_0_pre4-slc6_amd64_gcc462, davidlt_20120504_1632-60X-slc6, davidlt_20120504_1632-53X-slc6, davidlt_20120428_1111-60X-slc6, davidlt_test_5, davidlt_test_4, davidlt_20120425_1137-60X-slc6, davidlt_20120425_1120-52X-slc6, CMSSW_6_0_0_pre3-slc6, ForCMSSW_6_0_0_pre3-slc6_amd64_gcc462, davidlt_test_3, davidlt_test_2, davidlt_test_1, CMSSW_6_0_0_pre2-slc6, sm20120404-60X-slc6, davidlt_20120403_1447-60X-slc6, davidlt_20120401_1059-60X-slc6, sm20120327-60X-slc6, davidlt_20120323_1820-slc6, CMSSW_6_0_0_pre1-slc6, sm20120322-60x-slc6, davidlt_20120307_0959-60X-slc6, davidlt_20120307_0959-52X-slc6 |
Changes since 1.81: | +39 -7 lines |
Log Message: | rev1.78; Hack for Python on SLC6. Modify pyconfig.h to match macros from GLIBC features.h on Linux machines. _POSIX_C_SOURCE and _XOPEN_SOURCE macros are not identical anymore starting GLIBC 2.10.1. Python.h is not included before standard headers in CMSSW and pyconfig.h is not smart enough to detect already defined macros on Linux. The following problem does not exists on BSD machines as cdefs.h does not define these macros. |
# | User | Rev | Content |
---|---|---|---|
1 | dsr | 1.62 | ### RPM external python 2.6.4 |
2 | eulisse | 1.3 | ## INITENV +PATH PATH %i/bin |
3 | ## INITENV +PATH LD_LIBRARY_PATH %i/lib | ||
4 | lat | 1.73 | ## INITENV SETV PYTHON_LIB_SITE_PACKAGES lib/python%{python_major_version}/site-packages |
5 | argiro | 1.1 | # OS X patches and build fudging stolen from fink |
6 | lat | 1.73 | %{expand:%%define python_major_version %(echo %realversion | cut -d. -f1,2)} |
7 | %define online %(case %cmsplatf in (*onl_*_*) echo true;; (*) echo false;; esac) | ||
8 | dsr | 1.62 | |
9 | ratnik | 1.34 | Requires: expat bz2lib db4 gdbm |
10 | |||
11 | elmer | 1.55 | %if "%online" != "true" |
12 | dsr | 1.62 | Requires: zlib openssl sqlite |
13 | ratnik | 1.34 | %endif |
14 | |||
15 | eulisse | 1.8 | # FIXME: readline, crypt |
16 | argiro | 1.1 | # FIXME: gmp, panel, tk/tcl, x11 |
17 | |||
18 | dsr | 1.62 | Source0: http://www.python.org/ftp/%n/%realversion/Python-%realversion.tgz |
19 | eulisse | 1.69 | Patch0: python-2.6.4-dont-detect-dbm |
20 | eulisse | 1.78 | Patch1: python-2.6.4-fix-macosx-relocation |
21 | steen | 1.19 | |
22 | argiro | 1.1 | %prep |
23 | dsr | 1.62 | %setup -n Python-%realversion |
24 | lat | 1.74 | find . -type f | while read f; do |
25 | if head -n1 $f | grep -q /usr/local; then | ||
26 | perl -p -i -e "s|#!.*/usr/local/bin/python|#!/usr/bin/env python|" $f | ||
27 | else :; fi | ||
28 | done | ||
29 | eulisse | 1.5 | |
30 | eulisse | 1.69 | case %cmsplatf in |
31 | osx*) | ||
32 | eulisse | 1.71 | sed 's|@PREFIX@|%i|g' < %_sourcedir/python-osx | patch -p1 |
33 | eulisse | 1.69 | ;; |
34 | esac | ||
35 | %patch0 -p1 | ||
36 | eulisse | 1.78 | %patch1 -p1 |
37 | argiro | 1.1 | |
38 | %build | ||
39 | # Python is awkward about passing other include or library directories | ||
40 | # to it. Basically there is no way to pass anything from configure to | ||
41 | # make, or down to python itself. To get python detect the extensions | ||
42 | # we want to enable, we simply have to link the contents into python's | ||
43 | # own include/lib directories. Ugh. | ||
44 | # | ||
45 | # NB: It would sort-of make sense to link more stuff from /sw on OS X, | ||
46 | # but we simply cannot link the whole world. If you need something, | ||
47 | # see above for the commented-out list of packages that could be | ||
48 | # linked specifically, or could be built by ourselves, depending on | ||
49 | # whether we like to pick up system libraries or want total control. | ||
50 | dsr | 1.62 | #mkdir -p %i/include %i/lib |
51 | mkdir -p %i/include %i/lib %i/bin | ||
52 | ratnik | 1.34 | |
53 | elmer | 1.55 | %if "%online" != "true" |
54 | dsr | 1.62 | %define extradirs $ZLIB_ROOT $OPENSSL_ROOT $SQLITE_ROOT |
55 | ratnik | 1.34 | %else |
56 | %define extradirs %{nil} | ||
57 | %endif | ||
58 | |||
59 | dirs="$EXPAT_ROOT $BZ2LIB_ROOT $NCURSES_ROOT $DB4_ROOT $GDBM_ROOT %{extradirs}" | ||
60 | |||
61 | eulisse | 1.70 | # We need to export it because setup.py now uses it to determine the actual |
62 | # location of DB4, this was needed to avoid having it picked up from the system. | ||
63 | export DB4_ROOT | ||
64 | |||
65 | eulisse | 1.16 | echo $dirs |
66 | argiro | 1.1 | for d in $dirs; do |
67 | davidlt | 1.82 | for f in $d/include/*; do |
68 | [ -e $f ] || continue | ||
69 | rm -f %i/include/$(basename $f) | ||
70 | ln -s $f %i/include | ||
71 | done | ||
72 | for f in $d/lib/*; do | ||
73 | [ -e $f ] || continue | ||
74 | rm -f %i/lib/$(basename $f) | ||
75 | ln -s $f %i/lib | ||
76 | done | ||
77 | argiro | 1.1 | done |
78 | |||
79 | eulisse | 1.39 | additionalConfigureOptions="" |
80 | case %cmsplatf in | ||
81 | osx105* ) | ||
82 | additionalConfigureOptions="--disable-readline" | ||
83 | ;; | ||
84 | esac | ||
85 | |||
86 | fwyzard | 1.81 | ./configure --prefix=%i $additionalConfigureOptions --enable-shared \ |
87 | eulisse | 1.39 | --without-tkinter --disable-tkinter |
88 | |||
89 | davidlt | 1.82 | # Modify pyconfig.h to match macros from GLIBC features.h on Linux machines. |
90 | # _POSIX_C_SOURCE and _XOPEN_SOURCE macros are not identical anymore | ||
91 | # starting GLIBC 2.10.1. Python.h is not included before standard headers | ||
92 | # in CMSSW and pyconfig.h is not smart enough to detect already defined | ||
93 | # macros on Linux. The following problem does not exists on BSD machines as | ||
94 | # cdefs.h does not define these macros. | ||
95 | case %cmsplatf in | ||
96 | slc6*) | ||
97 | rm -f cms_configtest.cpp | ||
98 | cat <<CMS_EOF > cms_configtest.cpp | ||
99 | #include <features.h> | ||
100 | |||
101 | int main() { | ||
102 | return 0; | ||
103 | } | ||
104 | CMS_EOF | ||
105 | |||
106 | FEATURES=$(g++ -dM -E -DGNU_GCC=1 -D_GNU_SOURCE=1 -D_DARWIN_SOURCE=1 cms_configtest.cpp \ | ||
107 | | grep -E '_POSIX_C_SOURCE |_XOPEN_SOURCE ') | ||
108 | rm -f cms_configtest.cpp a.out | ||
109 | |||
110 | POSIX_C_SOURCE=$(echo "${FEATURES}" | grep _POSIX_C_SOURCE | cut -d ' ' -f 3) | ||
111 | XOPEN_SOURCE=$(echo "${FEATURES}" | grep _XOPEN_SOURCE | cut -d ' ' -f 3) | ||
112 | |||
113 | sed -ibak "s/\(#define _POSIX_C_SOURCE \)\(.*\)/\1${POSIX_C_SOURCE}/g" pyconfig.h | ||
114 | sed -ibak "s/\(#define _XOPEN_SOURCE \)\(.*\)/\1${XOPEN_SOURCE}/g" pyconfig.h | ||
115 | ;; | ||
116 | esac | ||
117 | |||
118 | ratnik | 1.38 | # The following is a kludge around the fact that the /usr/lib/libreadline.so |
119 | # symlink (for 32-bit lib) is missing on the 64bit machines | ||
120 | dsr | 1.62 | case %cmsplatf in |
121 | slc4_ia32* ) | ||
122 | mkdir -p %{i}/lib | ||
123 | ln -s /usr/lib/libreadline.so.4.3 %{i}/lib/libreadline.so | ||
124 | ;; | ||
125 | esac | ||
126 | ratnik | 1.38 | make %makeprocesses |
127 | ratnik | 1.37 | |
128 | argiro | 1.1 | %install |
129 | eulisse | 1.71 | # We need to export it because setup.py now uses it to determine the actual |
130 | # location of DB4, this was needed to avoid having it picked up from the system. | ||
131 | export DB4_ROOT | ||
132 | fwyzard | 1.81 | make install |
133 | dsr | 1.62 | %define pythonv %(echo %realversion | cut -d. -f 1,2) |
134 | eulisse | 1.8 | |
135 | dsr | 1.62 | case %cmsplatf in |
136 | osx*) | ||
137 | make install prefix=%i | ||
138 | (cd Misc; /bin/rm -rf RPM) | ||
139 | mkdir -p %i/share/doc/%n | ||
140 | cp -R Demo Doc %i/share/doc/%n | ||
141 | cp -R Misc Tools %i/lib/python%{pythonv} | ||
142 | gcc -dynamiclib -all_load -single_module \ | ||
143 | -framework System -framework CoreServices -framework Foundation \ | ||
144 | %i/lib/python%{pythonv}/config/libpython%{pythonv}.a \ | ||
145 | -undefined dynamic_lookup \ | ||
146 | -o %i/lib/python%{pythonv}/config/libpython%{pythonv}.dylib \ | ||
147 | -install_name %i/lib/python%{pythonv}/config/libpython%{pythonv}.dylib \ | ||
148 | -current_version %{pythonv} -compatibility_version %{pythonv} -ldl | ||
149 | (cd %i/lib/python%{pythonv}/config | ||
150 | perl -p -i -e 's|-fno-common||g' Makefile) | ||
151 | |||
152 | find %i/lib/python%{pythonv}/config -name 'libpython*' -exec mv -f {} %i/lib \; | ||
153 | ;; | ||
154 | esac | ||
155 | eulisse | 1.9 | |
156 | perl -p -i -e "s|^#!.*python|#!/usr/bin/env python|" %{i}/bin/idle \ | ||
157 | %{i}/bin/pydoc \ | ||
158 | dsr | 1.62 | %{i}/bin/python-config \ |
159 | %{i}/bin/2to3 \ | ||
160 | %{i}/bin/python2.6-config \ | ||
161 | eulisse | 1.9 | %{i}/bin/smtpd.py \ |
162 | dsr | 1.62 | %{i}/lib/python2.6/bsddb/dbshelve.py \ |
163 | %{i}/lib/python2.6/test/test_bz2.py \ | ||
164 | %{i}/lib/python2.6/test/test_largefile.py \ | ||
165 | %{i}/lib/python2.6/test/test_optparse.py | ||
166 | eulisse | 1.67 | |
167 | find %{i}/lib -maxdepth 1 -mindepth 1 ! -name '*python*' -exec rm {} \; | ||
168 | find %{i}/include -maxdepth 1 -mindepth 1 ! -name '*python*' -exec rm {} \; | ||
169 | muzaffar | 1.28 | |
170 | lat | 1.74 | # remove executable permission anything which is *.py script, |
171 | # is executable, but does not start with she-bang so not valid | ||
172 | # executable; this avoids problems with rpm 4.8+ find-requires | ||
173 | find %i -name '*.py' -perm +0111 | while read f; do | ||
174 | if head -n1 $f | grep -q '"'; then chmod -x $f; else :; fi | ||
175 | done | ||
176 | |||
177 | valya | 1.48 | # remove tkinter that brings dependency on libtk: |
178 | elmer | 1.58 | find %{i}/lib -type f -name "_tkinter.so" -exec rm {} \; |
179 | valya | 1.48 | |
180 | eulisse | 1.77 | # Remove documentation, examples and test files. |
181 | %define drop_files %i/share %{i}/lib/python%{pythonv}/test | ||
182 | diego | 1.75 | |
183 | # Remove .pyo files | ||
184 | find %i -name '*.pyo' -exec rm {} \; | ||
185 | |||
186 | lat | 1.68 | # Generate dependencies-setup.{sh,csh} so init.{sh,csh} picks full environment. |
187 | diego | 1.63 | mkdir -p %i/etc/profile.d |
188 | lat | 1.68 | : > %i/etc/profile.d/dependencies-setup.sh |
189 | : > %i/etc/profile.d/dependencies-setup.csh | ||
190 | for tool in $(echo %{requiredtools} | sed -e's|\s+| |;s|^\s+||'); do | ||
191 | root=$(echo $tool | tr a-z- A-Z_)_ROOT; eval r=\$$root | ||
192 | if [ X"$r" != X ] && [ -r "$r/etc/profile.d/init.sh" ]; then | ||
193 | echo "test X\$$root != X || . $r/etc/profile.d/init.sh" >> %i/etc/profile.d/dependencies-setup.sh | ||
194 | echo "test X\$$root != X || source $r/etc/profile.d/init.csh" >> %i/etc/profile.d/dependencies-setup.csh | ||
195 | fi | ||
196 | diego | 1.63 | done |
197 | |||
198 | eulisse | 1.16 | %post |
199 | dsr | 1.62 | %{relocateConfig}lib/python2.6/config/Makefile |
200 | lat | 1.68 | %{relocateConfig}etc/profile.d/dependencies-setup.*sh |