ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/CMSDIST/python.spec
Revision: 1.88
Committed: Wed Jul 18 09:34:13 2012 UTC (12 years, 9 months ago) by davidlt
Branch: MAIN
CVS Tags: davidlt_20121004_1021-60X-gcc472, CMSSW_6_0_0_patch1-slc5_amd64_gcc472, CMSSW_6_0_0_patch1-slc5_amd64_gcc462, daForCMSSW_6_0_0_patch1-slc5_amd64_gcc462, daForCMSSW_6_0_0_patch1-slc5_amd64_gcc472, CMSSW_6_0_0_patch1, daForCMSSW_6_0_0_patch1-slc5_amd64_gcc470, CMSSW_6_0_0_SLHCtkpre1, daForCMSSW_6_0_0_SLHCtkpre1-slc5_amd64_gcc462, ecbForCMSSW_6_0_0_SLHCtkpre1-slc5_amd64_gcc462, CMSSW_6_0_0-osx107_amd64_gcc462, CMSSW_6_0_0-slc6_amd64_gcc462, CMSSW_6_0_0-slc5_amd64_gcc470, daForCMSSW_6_0_0-osx107_amd64_gcc462, ForCMSSW_6_0_0-slc6_amd64_gcc462, daForCMSSW_6_0_0-slc5_amd64_gcc470, CMSSW_6_0_0_TS123272, daForCMSSW_6_0_0_TS123272-slc5_amd64_gcc462, CMSSW_6_0_0_TS123032, daForCMSSW_6_0_0_TS123032-slc5_amd64_gcc462, CMSSW_6_0_0, daForCMSSW_6_0_0-slc5_amd64_gcc462, davidlt_20120820_1005-61X-gcc470, davidlt_20120820_1003-61X-osx107, davidlt_20120820_0956-61X-slc6, davidlt_20120820_0956-61X, davidlt_20120813_1021-60X-gcc470, davidlt_20120809_1259-60X-gcc470, davidlt_20120809_1258-60X, davidlt_20120809_1256-60X-slc6, davidlt_20120809_1255-60X-osx107, davidlt_20120808_1030-60X-osx107, davidlt_20120808_1030-60X-gcc470, davidlt_20120808_1030-60X-slc6, davidlt_20120808_1030-60X, davidlt_20120808_1000-60X-osx107, davidlt_20120808_1000-60X-gcc470, davidlt_20120808_1000-60X-slc6, davidlt_20120808_1000-60X, CMSSW_6_0_0_pre11-slc6, CMSSW_6_0_0_pre11-osx107, CMSSW_6_0_0_pre11-gcc470, ForCMSSW_6_0_0_pre11-slc6_amd64_gcc462, daForCMSSW_6_0_0_pre11-osx107_amd64_gcc462, daForCMSSW_6_0_0_pre11-slc5_amd64_gcc470, CMSSW_6_0_0_pre11, daForCMSSW_6_0_0_pre11-slc5_amd64_gcc462, davidlt_20120801_0942-60X-osx107, davidlt_20120801_0941-60X-slc6, davidlt_20120801_0940-60X-gcc470, davidlt_20120801_0940-60X, davidlt_20120730_1526-60X-osx107, davidlt_20120730_1520-60X-gcc470, davidlt_20120730_1521-60X-slc6, davidlt_20120730_1520-60X, davidlt_20120725_1000-60X-osx107, davidlt_20120725_1000-60X-gcc470, davidlt_20120725_1000-60X-slc6, davidlt_20120725_1000-60X, CMSSW_6_0_0_pre10, daForCMSSW_6_0_0_pre10-slc5_amd64_gcc462, davidlt_20120724_1813-60X-osx107, davidlt_20120724_1817-60X-slc6, davidlt_20120724_1811-60X-gcc470, davidlt_20120724_1805-60X, CMSSW_6_0_0_pre9-gcc470, CMSSW_6_0_0_pre9-osx107, CMSSW_6_0_0_pre9, CMSSW_6_0_0_pre9-slc6, daForCMSSW_6_0_0_pre9-slc5_amd64_gcc470, ForCMSSW_6_0_0_pre9-slc6_amd64_gcc462, daForCMSSW_6_0_0_pre9-osx107_amd64_gcc462, daForCMSSW_6_0_0_pre9-slc5_amd64_gcc462, davidlt_20120718_1227-60X-osx107, davidlt_20120718_1208-60X-slc6, davidlt_20120718_1202-60X-gcc470, davidlt_20120718_1232-60X
Changes since 1.87: +5 -0 lines
Log Message:
Add a patch to fix pyport.h issue on OS X.

File Contents

# User Rev Content
1 davidlt 1.86 ### RPM external python 2.7.3
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 diego 1.85 ## INITENV SETV PYTHONHASHSEED random
6 argiro 1.1 # OS X patches and build fudging stolen from fink
7 lat 1.73 %{expand:%%define python_major_version %(echo %realversion | cut -d. -f1,2)}
8     %define online %(case %cmsplatf in (*onl_*_*) echo true;; (*) echo false;; esac)
9 dsr 1.62
10 ratnik 1.34 Requires: expat bz2lib db4 gdbm
11    
12 elmer 1.55 %if "%online" != "true"
13 dsr 1.62 Requires: zlib openssl sqlite
14 ratnik 1.34 %endif
15    
16 eulisse 1.8 # FIXME: readline, crypt
17 argiro 1.1 # FIXME: gmp, panel, tk/tcl, x11
18    
19 dsr 1.62 Source0: http://www.python.org/ftp/%n/%realversion/Python-%realversion.tgz
20 diego 1.85 Patch1: python-fix-macosx-relocation
21 davidlt 1.88 Patch2: python-2.7.3-fix-pyport
22 steen 1.19
23 argiro 1.1 %prep
24 dsr 1.62 %setup -n Python-%realversion
25 lat 1.74 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 diego 1.85 %patch1 -p0
31 argiro 1.1
32 davidlt 1.88 %ifos darwin
33     %patch2 -p1
34     %endif
35    
36 argiro 1.1 %build
37     # Python is awkward about passing other include or library directories
38     # to it. Basically there is no way to pass anything from configure to
39     # make, or down to python itself. To get python detect the extensions
40     # we want to enable, we simply have to link the contents into python's
41     # own include/lib directories. Ugh.
42     #
43     # NB: It would sort-of make sense to link more stuff from /sw on OS X,
44     # but we simply cannot link the whole world. If you need something,
45     # see above for the commented-out list of packages that could be
46     # linked specifically, or could be built by ourselves, depending on
47     # whether we like to pick up system libraries or want total control.
48 dsr 1.62 #mkdir -p %i/include %i/lib
49     mkdir -p %i/include %i/lib %i/bin
50 ratnik 1.34
51 elmer 1.55 %if "%online" != "true"
52 dsr 1.62 %define extradirs $ZLIB_ROOT $OPENSSL_ROOT $SQLITE_ROOT
53 ratnik 1.34 %else
54     %define extradirs %{nil}
55     %endif
56    
57     dirs="$EXPAT_ROOT $BZ2LIB_ROOT $NCURSES_ROOT $DB4_ROOT $GDBM_ROOT %{extradirs}"
58    
59 eulisse 1.70 # We need to export it because setup.py now uses it to determine the actual
60     # location of DB4, this was needed to avoid having it picked up from the system.
61     export DB4_ROOT
62    
63 davidlt 1.83 # Python's configure parses LDFLAGS and CPPFLAGS to look for aditional library and include directories
64 eulisse 1.16 echo $dirs
65 davidlt 1.83 LDFLAGS=""
66     CPPFLAGS=""
67 argiro 1.1 for d in $dirs; do
68 davidlt 1.83 LDFLAGS="$LDFLAGS -L $d/lib"
69     CPPFLAGS="$CPPFLAGS -I $d/include"
70 argiro 1.1 done
71 davidlt 1.83 export LDFLAGS
72     export CPPFLAGS
73 argiro 1.1
74 eulisse 1.39 additionalConfigureOptions=""
75     case %cmsplatf in
76     osx105* )
77     additionalConfigureOptions="--disable-readline"
78     ;;
79     esac
80    
81 davidlt 1.87 # Bugfix for dbm package. Use ndbm.h header and gdbm compatibility layer.
82     sed -ibak "s/ndbm_libs = \[\]/ndbm_libs = ['gdbm', 'gdbm_compat']/" setup.py
83    
84     ./configure --prefix=%i $additionalConfigureOptions --enable-shared
85 eulisse 1.39
86 davidlt 1.86 # Modify pyconfig.h to match macros from GLIBC features.h on Linux machines.
87     # _POSIX_C_SOURCE and _XOPEN_SOURCE macros are not identical anymore
88     # starting GLIBC 2.10.1. Python.h is not included before standard headers
89     # in CMSSW and pyconfig.h is not smart enough to detect already defined
90     # macros on Linux. The following problem does not exists on BSD machines as
91     # cdefs.h does not define these macros.
92     case %cmsplatf in
93     slc6*)
94     rm -f cms_configtest.cpp
95     cat <<CMS_EOF > cms_configtest.cpp
96     #include <features.h>
97    
98     int main() {
99     return 0;
100     }
101     CMS_EOF
102    
103     FEATURES=$(g++ -dM -E -DGNU_GCC=1 -D_GNU_SOURCE=1 -D_DARWIN_SOURCE=1 cms_configtest.cpp \
104     | grep -E '_POSIX_C_SOURCE |_XOPEN_SOURCE ')
105     rm -f cms_configtest.cpp a.out
106    
107     POSIX_C_SOURCE=$(echo "${FEATURES}" | grep _POSIX_C_SOURCE | cut -d ' ' -f 3)
108     XOPEN_SOURCE=$(echo "${FEATURES}" | grep _XOPEN_SOURCE | cut -d ' ' -f 3)
109    
110     sed -ibak "s/\(#define _POSIX_C_SOURCE \)\(.*\)/\1${POSIX_C_SOURCE}/g" pyconfig.h
111     sed -ibak "s/\(#define _XOPEN_SOURCE \)\(.*\)/\1${XOPEN_SOURCE}/g" pyconfig.h
112     ;;
113     esac
114    
115     # The following is a kludge around the fact that the /usr/lib/libreadline.so
116     # symlink (for 32-bit lib) is missing on the 64bit machines
117     case %cmsplatf in
118     slc4_ia32* )
119     mkdir -p %{i}/lib
120     ln -s /usr/lib/libreadline.so.4.3 %{i}/lib/libreadline.so
121     ;;
122     esac
123    
124 ratnik 1.38 make %makeprocesses
125 ratnik 1.37
126 argiro 1.1 %install
127 eulisse 1.71 # We need to export it because setup.py now uses it to determine the actual
128     # location of DB4, this was needed to avoid having it picked up from the system.
129     export DB4_ROOT
130 fwyzard 1.81 make install
131 dsr 1.62 %define pythonv %(echo %realversion | cut -d. -f 1,2)
132 eulisse 1.8
133 dsr 1.62 case %cmsplatf in
134     osx*)
135     make install prefix=%i
136     (cd Misc; /bin/rm -rf RPM)
137     mkdir -p %i/share/doc/%n
138     cp -R Demo Doc %i/share/doc/%n
139     cp -R Misc Tools %i/lib/python%{pythonv}
140     gcc -dynamiclib -all_load -single_module \
141     -framework System -framework CoreServices -framework Foundation \
142     %i/lib/python%{pythonv}/config/libpython%{pythonv}.a \
143     -undefined dynamic_lookup \
144     -o %i/lib/python%{pythonv}/config/libpython%{pythonv}.dylib \
145     -install_name %i/lib/python%{pythonv}/config/libpython%{pythonv}.dylib \
146     -current_version %{pythonv} -compatibility_version %{pythonv} -ldl
147     (cd %i/lib/python%{pythonv}/config
148     perl -p -i -e 's|-fno-common||g' Makefile)
149    
150     find %i/lib/python%{pythonv}/config -name 'libpython*' -exec mv -f {} %i/lib \;
151     ;;
152     esac
153 eulisse 1.9
154 diego 1.85 perl -p -i -e "s|^#!.*python|#!/usr/bin/env python|" %{i}/bin/idle \
155     %{i}/bin/pydoc \
156     %{i}/bin/python-config \
157     %{i}/bin/2to3 \
158 davidlt 1.86 %{i}/bin/python2.7-config \
159     %{i}/bin/smtpd.py
160 eulisse 1.67
161     find %{i}/lib -maxdepth 1 -mindepth 1 ! -name '*python*' -exec rm {} \;
162     find %{i}/include -maxdepth 1 -mindepth 1 ! -name '*python*' -exec rm {} \;
163 muzaffar 1.28
164 lat 1.74 # remove executable permission anything which is *.py script,
165     # is executable, but does not start with she-bang so not valid
166     # executable; this avoids problems with rpm 4.8+ find-requires
167     find %i -name '*.py' -perm +0111 | while read f; do
168     if head -n1 $f | grep -q '"'; then chmod -x $f; else :; fi
169     done
170    
171 valya 1.48 # remove tkinter that brings dependency on libtk:
172 elmer 1.58 find %{i}/lib -type f -name "_tkinter.so" -exec rm {} \;
173 valya 1.48
174 eulisse 1.77 # Remove documentation, examples and test files.
175 diego 1.85 %define drop_files { %i/share %{i}/lib/python%{pythonv}/test \
176     %{i}/lib/python%{pythonv}/distutils/tests \
177     %{i}/lib/python%{pythonv}/json/tests \
178     %{i}/lib/python%{pythonv}/ctypes/test \
179     %{i}/lib/python%{pythonv}/sqlite3/test \
180     %{i}/lib/python%{pythonv}/bsddb/test \
181     %{i}/lib/python%{pythonv}/email/test \
182     %{i}/lib/python%{pythonv}/lib2to3/tests }
183 diego 1.75
184     # Remove .pyo files
185     find %i -name '*.pyo' -exec rm {} \;
186    
187 lat 1.68 # Generate dependencies-setup.{sh,csh} so init.{sh,csh} picks full environment.
188 diego 1.63 mkdir -p %i/etc/profile.d
189 lat 1.68 : > %i/etc/profile.d/dependencies-setup.sh
190     : > %i/etc/profile.d/dependencies-setup.csh
191     for tool in $(echo %{requiredtools} | sed -e's|\s+| |;s|^\s+||'); do
192     root=$(echo $tool | tr a-z- A-Z_)_ROOT; eval r=\$$root
193     if [ X"$r" != X ] && [ -r "$r/etc/profile.d/init.sh" ]; then
194     echo "test X\$$root != X || . $r/etc/profile.d/init.sh" >> %i/etc/profile.d/dependencies-setup.sh
195     echo "test X\$$root != X || source $r/etc/profile.d/init.csh" >> %i/etc/profile.d/dependencies-setup.csh
196     fi
197 diego 1.63 done
198    
199 eulisse 1.16 %post
200 davidlt 1.87 %{relocateConfig}lib/python2.7/config/Makefile
201 lat 1.68 %{relocateConfig}etc/profile.d/dependencies-setup.*sh