ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/CMSDIST/python.spec
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.

File Contents

# 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