]> git.saurik.com Git - wxWidgets.git/blob - wxPython/distrib/mac/wxPythonOSX/build
A huge glob of changes in the 2.4 branch merged over to HEAD
[wxWidgets.git] / wxPython / distrib / mac / wxPythonOSX / build
1 #!/bin/sh -e
2 #----------------------------------------------------------------------
3 # Build wxMac and wxPythonOSX from the tarball and then make an
4 # Installer package out of it.
5
6 spectemplate=distrib/wxPythonFull.spec.in
7
8 if [ ! -d wxPython -o ! -e ${spectemplate} ]; then
9 echo "Please run this script from the root wxPython directory."
10 exit 1
11 fi
12
13 #----------------------------------------------------------------------
14 # Check Parameters
15
16 function usage {
17 echo ""
18 echo "Usage: $0 wx_version py_version [command flags...]"
19 echo " wx_version String to use for version in filenames, etc."
20 echo " py_version String to append to python (which python version to use.)"
21 echo ""
22 echo "command flags:"
23 echo " skiptar Don't unpack the tarball"
24 echo " use_cvs Use the CVS workspace instead of a tarfile"
25 echo " skipconfig Don't run configure"
26 echo " skipbuild Don't build wxWindows or wxPython"
27 echo " skipinstall Don't do the installation step"
28 echo " skipdmg Don't make the package or diskimage"
29 echo " skipclean Don't do the cleanup at the end"
30 }
31
32
33 if [ $# -lt 2 ]; then
34 usage
35 exit 1
36 fi
37
38 VERSION=$1
39 PYVER=$2
40 shift;shift
41
42
43 for flag in $*; do
44 case ${flag} in
45 skiptar) skiptar=1 ;;
46 use_cvs) skiptar=1; use_cvs=1 ;;
47 skipconfig) skipconfig=1; skiptar=1 ;;
48 skipbuild) skipbuild=1; skipconfig=1; skiptar=1 ;;
49 skipinstall) skipinstall=1 ;;
50 skipdmg) skipdmg=1 ;;
51 skipclean) skipclean=1 ;;
52
53 *) echo "Unknown flag \"${flag}\""
54 usage
55 exit 1
56 esac
57 done
58
59
60 SRCDIR=/Volumes/Gate.Stuff/Development/wxPython/dist/$VERSION
61 TARBALL=$SRCDIR/wxPythonSrc-$VERSION.tar.gz
62 SITEPACKAGES=/Library/Frameworks/Python.framework/Versions/$PYVER/lib/python$PYVER/site-packages
63
64 # TODO: Should I change the prefix to /usr?
65 PREFIX=/usr/local
66
67 PROGDIR="`dirname \"$0\"`"
68 TMPDIR=$PWD/_build_dmg
69
70 BUILDROOT=$TMPDIR/build
71 INSTALLROOT=$TMPDIR/install
72 INSTALLDEVEL=$TMPDIR/install-devel
73 DMGDIR=$TMPDIR/dmg
74 RESOURCEDIR=$PROGDIR/resources
75 DESTDIR=$PWD/dist
76
77
78
79 #----------------------------------------------------------------------
80 # Setup builddirs
81
82 mkdir -p $BUILDROOT
83 mkdir -p $INSTALLROOT
84 mkdir -p $INSTALLDEVEL
85 rm -rf $DMGDIR
86 mkdir -p $DMGDIR/root
87
88 pushd $BUILDROOT
89
90
91 #----------------------------------------------------------------------
92 # Unpack the tarball
93
94 if [ -z "$skiptar" ]; then
95 tar xzvf $TARBALL
96 fi
97
98 if [ "$use_cvs" = 1 ]; then
99 # copy the cvs workspace, except for build dirs
100
101 mkdir -p wxPythonSrc-$VERSION
102
103 echo Finding updated files...
104 if [ -e .last_copy ]; then
105 FEXPR="-cnewer .last_copy"
106 fi
107 find /projects/wx $FEXPR -print \
108 | grep -v wx/build \
109 | grep -v wxPython/build \
110 | grep -v wxPython/_build \
111 | grep -v CVS \
112 | cut -b 14- > filelist
113
114 for x in `cat filelist`; do
115 if [ -d "/projects/wx/$x" ]; then
116 mkdir -p "wxPythonSrc-$VERSION/$x"
117 else
118 echo $x
119 cp -p "/projects/wx/$x" "wxPythonSrc-$VERSION/$x"
120 fi
121 done
122
123 touch .last_copy
124 fi
125
126
127 cd wxPythonSrc-$VERSION
128 WXDIR=`pwd`
129 mkdir -p $WXDIR/build
130 cd $WXDIR/build
131
132 #----------------------------------------------------------------------
133
134
135 # Configure wxWindows
136 if [ -z "$skipconfig" ]; then
137 ../configure --with-mac --prefix=$PREFIX \
138 --with-opengl \
139 --enable-precomp=no \
140 --enable-geometry \
141 --enable-optimise \
142 --with-libjpeg=builtin \
143 --with-libpng=builtin \
144 --with-libtiff=builtin \
145
146
147 # --with-zlib=builtin
148 # --enable-debug_flag
149
150 fi
151
152 # Build wxWindows and wxPython
153 if [ -z "$skipbuild" ]; then
154 make
155
156 cd $WXDIR/wxPython
157 python$PYVER setup.py \
158 IN_CVS_TREE=1 \
159 WX_CONFIG="$WXDIR/build/wx-config --prefix=$WXDIR --exec-prefix=$WXDIR/build" \
160 build
161
162
163 # Build wxrc (XRC resource tool) but don't use the makefiles since they expect
164 # a shared version of the xrc lib to have been built...
165 cd $WXDIR/contrib/utils/wxrc
166 WX_CONFIG="$WXDIR/build/wx-config --prefix=$WXDIR --exec-prefix=$WXDIR/build"
167 wCC=`$WX_CONFIG --cc`
168 wCXX=`$WX_CONFIG --cxx`
169
170 for f in wxrc.cpp ../../src/xrc/*.cpp; do
171 echo $f
172 $wCXX `$WX_CONFIG --cxxflags` -I ../../include -I ../../src/xrc/expat/xmlparse -I ../../src/xrc/expat/xmltok -c $f
173 done
174 for f in ../../src/xrc/expat/xmlparse/xmlparse.c ../../src/xrc/expat/xmltok/xmlrole.c ../../src/xrc/expat/xmltok/xmltok.c; do
175 echo $f
176 $wCC `$WX_CONFIG --cxxflags` -I ../../include -I ../../src/xrc/expat/xmlparse -I ../../src/xrc/expat/xmltok -c $f
177 done
178
179 # the handlers are not needed
180 rm xh_*.o xmlrsall.o
181
182 $wCXX `$WX_CONFIG --libs` *.o -o wxrc
183 strip wxrc
184
185 fi
186
187 #----------------------------------------------------------------------
188 # Install wxWindows
189
190 if [ -z "$skipinstall" ]; then
191 cd $WXDIR/build
192 make prefix=$INSTALLROOT/$PREFIX install
193
194
195 # and wxPython
196 cd $WXDIR/wxPython
197 python$PYVER setup.py \
198 IN_CVS_TREE=1 \
199 WX_CONFIG="$WXDIR/build/wx-config --prefix=$WXDIR --exec-prefix=$WXDIR/build" \
200 install \
201 --root=$INSTALLROOT
202
203 # install wxPython's tool scripts
204 cd $WXDIR/wxPython/scripts
205 python$PYVER CreateMacScripts.py $INSTALLROOT $PREFIX/bin
206
207 # Install wxrc
208 cp $WXDIR/contrib/utils/wxrc/wxrc $INSTALLROOT$PREFIX/bin
209
210
211 # Move wxWindows devel files and save for a separate installer package
212 mkdir -p $INSTALLDEVEL$PREFIX
213 mkdir -p $INSTALLDEVEL$PREFIX/bin
214 mkdir -p $INSTALLDEVEL$PREFIX/lib
215 mv -f $INSTALLROOT$PREFIX/include $INSTALLDEVEL$PREFIX
216 mv -f $INSTALLROOT$PREFIX/lib/wx $INSTALLDEVEL$PREFIX/lib
217 mv -f $INSTALLROOT$PREFIX/bin/wx* $INSTALLDEVEL$PREFIX/bin
218
219 # TODO for $INSTALLROOT and $INSTALLDEVEL ?
220 # chown -R root:admin
221 # chmod -R g+w
222 fi
223
224 popd
225
226 #----------------------------------------------------------------------
227
228 # Make the Installer packages and disk image
229 if [ -z "$skipdmg" ]; then
230
231 # Remove the .pyc/.pyo files they just take up space and can be recreated
232 # during the install.
233 python $PROGDIR/../zappycfiles.py $INSTALLROOT/Library/Frameworks/Python.framework
234
235 # Copy the demo, samples, and such to the Applications dir
236 APPDIR=$INSTALLROOT/Applications/wxPythonOSX-$VERSION
237 mkdir -p $APPDIR
238 cp -pR $WXDIR/wxPython/demo $APPDIR
239 cp -pR $WXDIR/wxPython/samples $APPDIR
240
241 # Move sample launchers to .pyw files.
242 # TODO: A better, more automated way to do this!!!
243 pushd $APPDIR/samples
244 for x in StyleEditor/STCStyleEditor \
245 doodle/superdoodle \
246 frogedit/FrogEdit \
247 pySketch/pySketch \
248 wxProject/wxProject; do
249 mv $x.py $x.pyw
250 done
251 popd
252
253 # Make an app to launch the demo
254 cat > $APPDIR/demo/RunDemo.pyw <<EOF
255 import sys, os
256 sys.path.insert(0, "/Applications/wxPythonOSX-$VERSION/demo")
257 os.chdir("/Applications/wxPythonOSX-$VERSION/demo")
258 import Main
259 Main.main()
260 EOF
261 pythonw $PROGDIR/../buildapp.py \
262 --builddir=$APPDIR \
263 --name=RunDemo \
264 --mainprogram=$APPDIR/demo/RunDemo.pyw \
265 --iconfile=$PROGDIR/RunDemo.icns \
266 build
267
268 # Make an app to launch PyShell
269 pythonw $PROGDIR/../buildapp.py \
270 --builddir=$APPDIR \
271 --name=PyShell \
272 --mainprogram=$INSTALLROOT$PREFIX/bin/pyshell.py \
273 --iconfile=$PROGDIR/PieShell.icns \
274 build
275
276 # Make an app to launch XRCed
277 pythonw $PROGDIR/../buildapp.py \
278 --builddir=$APPDIR \
279 --name=XRCed \
280 --mainprogram=$INSTALLROOT$PREFIX/bin/xrced.py \
281 --iconfile=$PROGDIR/XRCed.icns \
282 build
283
284
285 # Make the welcome message
286 cat > $RESOURCEDIR/Welcome.txt <<EOF
287 Welcome!
288
289 This program will install wxPython $VERSION for MacPython-OSX $PYVER.
290
291 Build date: `date`
292 EOF
293
294 # make the preflight script
295 cat > $RESOURCEDIR/preflight <<EOF
296 #!/bin/sh
297 # Cleanup any old install of the wxPython package
298 rm -rf \$2$SITEPACKAGES/wxPython
299 exit 0
300 EOF
301 chmod +x $RESOURCEDIR/preflight
302
303 # make the postflight script
304 cat > $RESOURCEDIR/postflight <<EOF
305 #!/bin/sh -e
306 # Compile the .py files in the wxPython pacakge
307 /usr/local/bin/python \$2$SITEPACKAGES/../compileall.py \$2$SITEPACKAGES/wxPython
308 /usr/local/bin/python -O \$2$SITEPACKAGES/../compileall.py \$2$SITEPACKAGES/wxPython
309
310 # and in the demo
311 /usr/local/bin/python \$2$SITEPACKAGES/../compileall.py /Applications/wxPythonOSX-$VERSION/demo
312
313 # Make the demo/data dir writable
314 chmod a+w /Applications/wxPythonOSX-$VERSION/demo/data
315
316 # and the wxPython pacakge should be group writable
317 chgrp -R admin \$2$SITEPACKAGES/wxPython
318 chgrp -R admin /Applications/wxPythonOSX-$VERSION
319 chmod -R g+w \$2$SITEPACKAGES/wxPython
320 chmod -R g+w /Applications/wxPythonOSX-$VERSION
321
322 exit 0
323 EOF
324 chmod +x $RESOURCEDIR/postflight
325
326
327
328 # Finally, build the main package...
329 rm -rf wxPythonOSX.pkg
330 python $PROGDIR/../buildpkg.py \
331 --Title=wxPythonOSX \
332 --Version=$VERSION \
333 --Description="wxPython $VERSION for MacPython-OSX $PYVER" \
334 --NeedsAuthorization="YES" \
335 --Relocatable="NO" \
336 --InstallOnly="YES" \
337 $INSTALLROOT \
338 $RESOURCEDIR
339
340 mv wxPythonOSX.pkg $DMGDIR/root
341
342
343 # and the devel package
344 rm -rf wxPythonOSX-devel.pkg
345 python $PROGDIR/../buildpkg.py \
346 --Title=wxPythonOSX-devel \
347 --Version=$VERSION \
348 --Description="Headers and such that allow you to link with the same wxMac that wxPython does" \
349 --NeedsAuthorization="YES" \
350 --Relocatable="NO" \
351 --InstallOnly="YES" \
352 $INSTALLROOT
353
354 mv wxPythonOSX-devel.pkg $DMGDIR/root
355
356
357 # Make a README.txt to go on the disk image
358 cat > $DMGDIR/root/README.txt <<EOF
359 The files on this disk image are Installer packages for wxPythonOSX
360 $VERSION for MacPython-OSX $PVER. You must already have MacPython-OSX
361 installed.
362
363 The wxPython extension modules, library, demo and samples are
364 contained in the wxPythonOSX package. You should install at least this
365 package to use wxPython.
366
367 If you have any need to create applicaitons or extension modules that
368 link with the same wxMac that wxPython does, then you can also install
369 the wxPythonOSX-devel package to get the necessary header files and
370 such. Otherwise you don't need it.
371
372 Happy Hacking!
373 EOF
374
375
376 # license files, etc.
377 cp -pR $WXDIR/wxPython/licence $DMGDIR/root
378 cp $WXDIR/wxPython/CHANGES.txt $DMGDIR/root
379
380 # and then finally make a disk image containing the packages and etc.
381 $PROGDIR/../makedmg $DMGDIR/root $DMGDIR wxPythonOSX-$VERSION-py$PYVER
382
383 echo Moving $DMGDIR/wxPythonOSX-$VERSION-py$PYVER.dmg to $DESTDIR
384 mv $DMGDIR/wxPythonOSX-$VERSION-py$PYVER.dmg $DESTDIR
385 fi
386
387
388 # Cleanup build/install dirs
389 if [ -z "$skipclean" ]; then
390 echo "Cleaning up..."
391 rm -rf $TMPDIR
392 else
393 echo "Cleanup is disabled. You should remove $TMPDIR when finished"
394 fi
395