ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/CMSDIST/python.spec
Revision: 1.84
Committed: Mon Mar 12 09:46:28 2012 UTC (13 years, 1 month ago) by lat
Branch: MAIN
CVS Tags: TW20120421b, TW20120421a, bld_1334854417_PHEDEX-combined-agents_slc5_amd64_gcc461, bld_1334681121_PHEDEX-combined-agents_slc5_amd64_gcc461, HG1205a, HG1204h, HG1204g, HG1204f, HG1204e, HG1204d, dieHG1204d, HG1204c, HG1204b
Changes since 1.83: +2 -0 lines
Log Message:
Add patch to distutils to guess platform correctly on OS X
when python is built with our own GCC (no -arch options) as 64-bit,
but the system is running 32-bit kernel.

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 lat 1.84 Patch2: python-2.6.4-macosx-64bit
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 eulisse 1.5
31 eulisse 1.69 case %cmsplatf in
32     osx*)
33 eulisse 1.71 sed 's|@PREFIX@|%i|g' < %_sourcedir/python-osx | patch -p1
34 eulisse 1.69 ;;
35     esac
36     %patch0 -p1
37 eulisse 1.78 %patch1 -p1
38 lat 1.84 %patch2 -p1
39 argiro 1.1
40     %build
41     # Python is awkward about passing other include or library directories
42     # to it. Basically there is no way to pass anything from configure to
43     # make, or down to python itself. To get python detect the extensions
44     # we want to enable, we simply have to link the contents into python's
45     # own include/lib directories. Ugh.
46     #
47     # NB: It would sort-of make sense to link more stuff from /sw on OS X,
48     # but we simply cannot link the whole world. If you need something,
49     # see above for the commented-out list of packages that could be
50     # linked specifically, or could be built by ourselves, depending on
51     # whether we like to pick up system libraries or want total control.
52 dsr 1.62 #mkdir -p %i/include %i/lib
53     mkdir -p %i/include %i/lib %i/bin
54 ratnik 1.34
55 elmer 1.55 %if "%online" != "true"
56 dsr 1.62 %define extradirs $ZLIB_ROOT $OPENSSL_ROOT $SQLITE_ROOT
57 ratnik 1.34 %else
58     %define extradirs %{nil}
59     %endif
60    
61     dirs="$EXPAT_ROOT $BZ2LIB_ROOT $NCURSES_ROOT $DB4_ROOT $GDBM_ROOT %{extradirs}"
62    
63 eulisse 1.70 # We need to export it because setup.py now uses it to determine the actual
64     # location of DB4, this was needed to avoid having it picked up from the system.
65     export DB4_ROOT
66    
67 davidlt 1.83 # Python's configure parses LDFLAGS and CPPFLAGS to look for aditional library and include directories
68 eulisse 1.16 echo $dirs
69 davidlt 1.83 LDFLAGS=""
70     CPPFLAGS=""
71 argiro 1.1 for d in $dirs; do
72 davidlt 1.83 LDFLAGS="$LDFLAGS -L $d/lib"
73     CPPFLAGS="$CPPFLAGS -I $d/include"
74 argiro 1.1 done
75 davidlt 1.83 export LDFLAGS
76     export CPPFLAGS
77 argiro 1.1
78 eulisse 1.39 additionalConfigureOptions=""
79     case %cmsplatf in
80     osx105* )
81     additionalConfigureOptions="--disable-readline"
82     ;;
83     esac
84    
85 fwyzard 1.81 ./configure --prefix=%i $additionalConfigureOptions --enable-shared \
86 eulisse 1.39 --without-tkinter --disable-tkinter
87    
88 ratnik 1.38 # The following is a kludge around the fact that the /usr/lib/libreadline.so
89     # symlink (for 32-bit lib) is missing on the 64bit machines
90 dsr 1.62 case %cmsplatf in
91     slc4_ia32* )
92     mkdir -p %{i}/lib
93     ln -s /usr/lib/libreadline.so.4.3 %{i}/lib/libreadline.so
94     ;;
95     esac
96 ratnik 1.38 make %makeprocesses
97 ratnik 1.37
98 argiro 1.1 %install
99 eulisse 1.71 # We need to export it because setup.py now uses it to determine the actual
100     # location of DB4, this was needed to avoid having it picked up from the system.
101     export DB4_ROOT
102 fwyzard 1.81 make install
103 dsr 1.62 %define pythonv %(echo %realversion | cut -d. -f 1,2)
104 eulisse 1.8
105 dsr 1.62 case %cmsplatf in
106     osx*)
107     make install prefix=%i
108     (cd Misc; /bin/rm -rf RPM)
109     mkdir -p %i/share/doc/%n
110     cp -R Demo Doc %i/share/doc/%n
111     cp -R Misc Tools %i/lib/python%{pythonv}
112     gcc -dynamiclib -all_load -single_module \
113     -framework System -framework CoreServices -framework Foundation \
114     %i/lib/python%{pythonv}/config/libpython%{pythonv}.a \
115     -undefined dynamic_lookup \
116     -o %i/lib/python%{pythonv}/config/libpython%{pythonv}.dylib \
117     -install_name %i/lib/python%{pythonv}/config/libpython%{pythonv}.dylib \
118     -current_version %{pythonv} -compatibility_version %{pythonv} -ldl
119     (cd %i/lib/python%{pythonv}/config
120     perl -p -i -e 's|-fno-common||g' Makefile)
121    
122     find %i/lib/python%{pythonv}/config -name 'libpython*' -exec mv -f {} %i/lib \;
123     ;;
124     esac
125 eulisse 1.9
126     perl -p -i -e "s|^#!.*python|#!/usr/bin/env python|" %{i}/bin/idle \
127     %{i}/bin/pydoc \
128 dsr 1.62 %{i}/bin/python-config \
129     %{i}/bin/2to3 \
130     %{i}/bin/python2.6-config \
131 eulisse 1.9 %{i}/bin/smtpd.py \
132 dsr 1.62 %{i}/lib/python2.6/bsddb/dbshelve.py \
133     %{i}/lib/python2.6/test/test_bz2.py \
134     %{i}/lib/python2.6/test/test_largefile.py \
135     %{i}/lib/python2.6/test/test_optparse.py
136 eulisse 1.67
137     find %{i}/lib -maxdepth 1 -mindepth 1 ! -name '*python*' -exec rm {} \;
138     find %{i}/include -maxdepth 1 -mindepth 1 ! -name '*python*' -exec rm {} \;
139 muzaffar 1.28
140 lat 1.74 # remove executable permission anything which is *.py script,
141     # is executable, but does not start with she-bang so not valid
142     # executable; this avoids problems with rpm 4.8+ find-requires
143     find %i -name '*.py' -perm +0111 | while read f; do
144     if head -n1 $f | grep -q '"'; then chmod -x $f; else :; fi
145     done
146    
147 valya 1.48 # remove tkinter that brings dependency on libtk:
148 elmer 1.58 find %{i}/lib -type f -name "_tkinter.so" -exec rm {} \;
149 valya 1.48
150 eulisse 1.77 # Remove documentation, examples and test files.
151     %define drop_files %i/share %{i}/lib/python%{pythonv}/test
152 diego 1.75
153     # Remove .pyo files
154     find %i -name '*.pyo' -exec rm {} \;
155    
156 lat 1.68 # Generate dependencies-setup.{sh,csh} so init.{sh,csh} picks full environment.
157 diego 1.63 mkdir -p %i/etc/profile.d
158 lat 1.68 : > %i/etc/profile.d/dependencies-setup.sh
159     : > %i/etc/profile.d/dependencies-setup.csh
160     for tool in $(echo %{requiredtools} | sed -e's|\s+| |;s|^\s+||'); do
161     root=$(echo $tool | tr a-z- A-Z_)_ROOT; eval r=\$$root
162     if [ X"$r" != X ] && [ -r "$r/etc/profile.d/init.sh" ]; then
163     echo "test X\$$root != X || . $r/etc/profile.d/init.sh" >> %i/etc/profile.d/dependencies-setup.sh
164     echo "test X\$$root != X || source $r/etc/profile.d/init.csh" >> %i/etc/profile.d/dependencies-setup.csh
165     fi
166 diego 1.63 done
167    
168 eulisse 1.16 %post
169 dsr 1.62 %{relocateConfig}lib/python2.6/config/Makefile
170 lat 1.68 %{relocateConfig}etc/profile.d/dependencies-setup.*sh